1/*
2 * Copyright 2015 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Axel D��rfler, <axeld@pinc-software.de>
7 */
8
9
10#include <Catalog.h>
11#include <NetworkSettings.h>
12#include <NetworkSettingsAddOn.h>
13
14#include "ServiceListItem.h"
15#include "ServiceView.h"
16
17
18using namespace BNetworkKit;
19
20
21#undef B_TRANSLATION_CONTEXT
22#define B_TRANSLATION_CONTEXT "TelnetServiceAddOn"
23
24
25class TelnetServiceAddOn : public BNetworkSettingsAddOn {
26public:
27								TelnetServiceAddOn(image_id image,
28									BNetworkSettings& settings);
29	virtual						~TelnetServiceAddOn();
30
31	virtual	BNetworkSettingsItem*
32								CreateNextItem(uint32& cookie);
33};
34
35
36class TelnetServiceItem : public BNetworkSettingsItem {
37public:
38								TelnetServiceItem(BNetworkSettings& settings);
39	virtual						~TelnetServiceItem();
40
41	virtual	BNetworkSettingsType
42								Type() const;
43
44	virtual BListItem*			ListItem();
45	virtual BView*				View();
46
47	virtual	status_t			Revert();
48	virtual bool				IsRevertable();
49
50	virtual void				SettingsUpdated(uint32 which);
51
52private:
53			BNetworkSettings&	fSettings;
54			BListItem*			fItem;
55			ServiceView*		fView;
56};
57
58
59// #pragma mark -
60
61
62TelnetServiceItem::TelnetServiceItem(BNetworkSettings& settings)
63	:
64	fSettings(settings),
65	fItem(new ServiceListItem("telnet", B_TRANSLATE("Telnet server"),
66		settings)),
67	fView(NULL)
68{
69}
70
71
72TelnetServiceItem::~TelnetServiceItem()
73{
74	if (fView->Parent() == NULL)
75		delete fView;
76
77	delete fItem;
78}
79
80
81BNetworkSettingsType
82TelnetServiceItem::Type() const
83{
84	return B_NETWORK_SETTINGS_TYPE_SERVICE;
85}
86
87
88BListItem*
89TelnetServiceItem::ListItem()
90{
91	return fItem;
92}
93
94
95BView*
96TelnetServiceItem::View()
97{
98	if (fView == NULL) {
99		fView = new ServiceView("telnet", "telnetd",
100			B_TRANSLATE("Telnet server"),
101			B_TRANSLATE("The Telnet server allows you to remotely access "
102				"your machine with a terminal session using the telnet "
103				"protocol.\n\nPlease note that it is an insecure and "
104				"unencrypted connection."), fSettings);
105	}
106
107	return fView;
108}
109
110
111status_t
112TelnetServiceItem::Revert()
113{
114	return fView != NULL ? fView->Revert() : B_OK;
115}
116
117
118bool
119TelnetServiceItem::IsRevertable()
120{
121	return fView != NULL ? fView->IsRevertable() : false;
122}
123
124
125void
126TelnetServiceItem::SettingsUpdated(uint32 which)
127{
128	if (fView != NULL)
129		fView->SettingsUpdated(which);
130}
131
132
133// #pragma mark -
134
135
136TelnetServiceAddOn::TelnetServiceAddOn(image_id image,
137	BNetworkSettings& settings)
138	:
139	BNetworkSettingsAddOn(image, settings)
140{
141}
142
143
144TelnetServiceAddOn::~TelnetServiceAddOn()
145{
146}
147
148
149BNetworkSettingsItem*
150TelnetServiceAddOn::CreateNextItem(uint32& cookie)
151{
152	if (cookie++ == 0)
153		return new TelnetServiceItem(Settings());
154
155	return NULL;
156}
157
158
159// #pragma mark -
160
161
162extern "C"
163BNetworkSettingsAddOn*
164instantiate_network_settings_add_on(image_id image, BNetworkSettings& settings)
165{
166	return new TelnetServiceAddOn(image, settings);
167}
168