xref: /haiku/src/kits/debugger/target_host_interface/network/NetworkTargetHostInterfaceInfo.cpp (revision b31cb92f29fe89eaca84d173d0f70d38bf0c6a3d)
1 /*
2  * Copyright 2016-2017, Rene Gollent, rene@gollent.com.
3  * Distributed under the terms of the MIT License.
4  */
5 #include "NetworkTargetHostInterfaceInfo.h"
6 
7 #include <AutoDeleter.h>
8 
9 #include "NetworkTargetHostInterface.h"
10 #include "SettingsDescription.h"
11 #include "Settings.h"
12 #include "Setting.h"
13 
14 
15 static const char* kHostnameSetting = "hostname";
16 static const char* kPortSetting = "port";
17 
18 
19 NetworkTargetHostInterfaceInfo::NetworkTargetHostInterfaceInfo()
20 	:
21 	TargetHostInterfaceInfo("Network"),
22 	fDescription(NULL)
23 {
24 }
25 
26 
27 NetworkTargetHostInterfaceInfo::~NetworkTargetHostInterfaceInfo()
28 {
29 	if (fDescription != NULL)
30 		fDescription->ReleaseReference();
31 }
32 
33 
34 status_t
35 NetworkTargetHostInterfaceInfo::Init()
36 {
37 	fDescription = new(std::nothrow) SettingsDescription;
38 	if (fDescription == NULL)
39 		return B_NO_MEMORY;
40 
41 	Setting* setting = new(std::nothrow) StringSettingImpl(kHostnameSetting,
42 		"Hostname", "");
43 	BReference<Setting> settingsReference(setting, true);
44 	if (setting == NULL)
45 		return B_NO_MEMORY;
46 	if (!fDescription->AddSetting(setting))
47 		return B_NO_MEMORY;
48 
49 	setting = new(std::nothrow) BoundedSettingImpl(kPortSetting, "Port",
50 		(uint16)1, (uint16)65535, (uint16)8305);
51 	if (setting == NULL)
52 		return B_NO_MEMORY;
53 
54 	settingsReference.SetTo(setting, true);
55 	if (!fDescription->AddSetting(setting))
56 		return B_NO_MEMORY;
57 
58 	return B_OK;
59 }
60 
61 
62 bool
63 NetworkTargetHostInterfaceInfo::IsLocal() const
64 {
65 	return false;
66 }
67 
68 
69 bool
70 NetworkTargetHostInterfaceInfo::IsConfigured(Settings* settings) const
71 {
72 	BVariant hostSetting = settings->Value(kHostnameSetting);
73 	BVariant portSetting = settings->Value(kPortSetting);
74 
75 	if (hostSetting.Type() != B_STRING_TYPE || !portSetting.IsNumber())
76 		return false;
77 
78 	if (strlen(hostSetting.ToString()) == 0)
79 		return false;
80 
81 	return true;
82 }
83 
84 
85 SettingsDescription*
86 NetworkTargetHostInterfaceInfo::GetSettingsDescription() const
87 {
88 	return fDescription;
89 }
90 
91 
92 status_t
93 NetworkTargetHostInterfaceInfo::CreateInterface(Settings* settings,
94 	TargetHostInterface*& _interface) const
95 {
96 	NetworkTargetHostInterface* interface
97 		= new(std::nothrow) NetworkTargetHostInterface;
98 	if (interface == NULL)
99 		return B_NO_MEMORY;
100 
101 	status_t error = interface->Init(settings);
102 	if (error != B_OK) {
103 		delete interface;
104 		return error;
105 	}
106 
107 	_interface = interface;
108 	return B_OK;
109 }
110 
111