Skip to content

Commit ee1404a

Browse files
authored
feat(ips): adds support of IPS_HTTPProxyAccessPoint (#578)
1 parent 46a9e34 commit ee1404a

File tree

3 files changed

+106
-13
lines changed

3 files changed

+106
-13
lines changed

pkg/wsman/ips/http/decoder.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
package http
77

88
const (
9-
ValueNotFound = "Value not found in map"
10-
IPSHTTPProxyService = "IPS_HTTPProxyService"
9+
ValueNotFound = "Value not found in map"
10+
IPSHTTPProxyService = "IPS_HTTPProxyService"
11+
IPSHTTPProxyAccessPoint = "IPS_HTTPProxyAccessPoint"
1112

1213
AddProxyAccessPoint = "AddProxyAccessPoint"
1314
)
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/*********************************************************************
2+
* Copyright (c) Intel Corporation 2025
3+
* SPDX-License-Identifier: Apache-2.0
4+
**********************************************************************/
5+
6+
// Package http facilitates communication with Intel® AMT devices to manage HTTP proxy access point configuration.
7+
//
8+
// This service represents the HTTP Proxy Access Points configured for user-initiated connections through Intel AMT firmware.
9+
package http
10+
11+
import (
12+
"encoding/xml"
13+
14+
"github.com/device-management-toolkit/go-wsman-messages/v2/internal/message"
15+
"github.com/device-management-toolkit/go-wsman-messages/v2/pkg/wsman/base"
16+
"github.com/device-management-toolkit/go-wsman-messages/v2/pkg/wsman/client"
17+
"github.com/device-management-toolkit/go-wsman-messages/v2/pkg/wsman/common"
18+
)
19+
20+
// ProxyAccessPointService struct represents the HTTP Proxy Access Point Service.
21+
type ProxyAccessPointService struct {
22+
base.WSManService[ProxyAccessPointResponse]
23+
}
24+
25+
// ProxyAccessPointResponse represents responses for IPS_HTTPProxyAccessPoint operations.
26+
type ProxyAccessPointResponse struct {
27+
*client.Message
28+
XMLName xml.Name `xml:"Envelope"`
29+
Header message.Header `xml:"Header"`
30+
Body ProxyAccessPointBody `xml:"Body"`
31+
}
32+
33+
// ProxyAccessPointBody represents the body of IPS_HTTPProxyAccessPoint responses.
34+
type ProxyAccessPointBody struct {
35+
XMLName xml.Name `xml:"Body"`
36+
EnumerateResponse common.EnumerateResponse `xml:"EnumerateResponse"`
37+
PullResponse ProxyAccessPointPullResponse `xml:"PullResponse"`
38+
GetAndPutResponse HTTPProxyAccessPointItem `xml:"IPS_HTTPProxyAccessPoint"`
39+
}
40+
41+
// ProxyAccessPointPullResponse represents the pull response for proxy access points.
42+
type ProxyAccessPointPullResponse struct {
43+
XMLName xml.Name `xml:"PullResponse"`
44+
Items []HTTPProxyAccessPointItem `xml:"Items>IPS_HTTPProxyAccessPoint"`
45+
}
46+
47+
// HTTPProxyAccessPointItem represents an individual HTTP proxy access point configuration.
48+
type HTTPProxyAccessPointItem struct {
49+
XMLName xml.Name `xml:"IPS_HTTPProxyAccessPoint"`
50+
Name string `xml:"Name,omitempty"`
51+
CreationClassName string `xml:"CreationClassName,omitempty"`
52+
SystemName string `xml:"SystemName,omitempty"`
53+
SystemCreationClassName string `xml:"SystemCreationClassName,omitempty"`
54+
ElementName string `xml:"ElementName,omitempty"`
55+
AccessInfo string `xml:"AccessInfo,omitempty"` // The proxy address (IP or FQDN)
56+
InfoFormat int `xml:"InfoFormat,omitempty"` // Format of AccessInfo: 3=IPv4, 4=IPv6, 201=FQDN
57+
Port int `xml:"Port,omitempty"` // Proxy port
58+
NetworkDnsSuffix string `xml:"NetworkDnsSuffix,omitempty"` // Domain suffix
59+
}
60+
61+
// NewHTTPProxyAccessPointServiceWithClient returns a new instance of the ProxyAccessPointService struct.
62+
func NewHTTPProxyAccessPointServiceWithClient(wsmanMessageCreator *message.WSManMessageCreator, client client.WSMan) ProxyAccessPointService {
63+
return ProxyAccessPointService{
64+
base.NewService[ProxyAccessPointResponse](wsmanMessageCreator, IPSHTTPProxyAccessPoint, client),
65+
}
66+
}
67+
68+
// Delete removes the specified HTTP proxy access point instance.
69+
func (service ProxyAccessPointService) Delete(name string) (response ProxyAccessPointResponse, err error) {
70+
selector := message.Selector{Name: "Name", Value: name}
71+
response = ProxyAccessPointResponse{
72+
Message: &client.Message{
73+
XMLInput: service.Base.Delete(selector),
74+
},
75+
}
76+
77+
// send the message to AMT
78+
err = service.Base.Execute(response.Message)
79+
if err != nil {
80+
return response, err
81+
}
82+
83+
// put the xml response into the go struct
84+
err = xml.Unmarshal([]byte(response.XMLOutput), &response)
85+
if err != nil {
86+
return response, err
87+
}
88+
89+
return response, nil
90+
}

pkg/wsman/ips/messages.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,18 @@ import (
2121
)
2222

2323
type Messages struct {
24-
wsmanMessageCreator *message.WSManMessageCreator
25-
OptInService optin.Service
26-
HostBasedSetupService hostbasedsetup.Service
27-
AlarmClockOccurrence alarmclock.Occurrence
28-
IEEE8021xCredentialContext ieee8021x.CredentialContext
29-
IEEE8021xSettings ieee8021x.Settings
30-
PowerManagementService power.ManagementService
31-
ScreenSettingData screensetting.Data
32-
SecIOService secio.Service
33-
KVMRedirectionSettingData kvmredirection.SettingData
34-
HTTPProxyService http.ProxyService
24+
wsmanMessageCreator *message.WSManMessageCreator
25+
OptInService optin.Service
26+
HostBasedSetupService hostbasedsetup.Service
27+
AlarmClockOccurrence alarmclock.Occurrence
28+
IEEE8021xCredentialContext ieee8021x.CredentialContext
29+
IEEE8021xSettings ieee8021x.Settings
30+
PowerManagementService power.ManagementService
31+
ScreenSettingData screensetting.Data
32+
SecIOService secio.Service
33+
KVMRedirectionSettingData kvmredirection.SettingData
34+
HTTPProxyService http.ProxyService
35+
HTTPProxyAccessPointService http.ProxyAccessPointService
3536
}
3637

3738
func NewMessages(client client.WSMan) Messages {
@@ -50,6 +51,7 @@ func NewMessages(client client.WSMan) Messages {
5051
m.SecIOService = secio.NewSecIOServiceWithClient(wsmanMessageCreator, client)
5152
m.KVMRedirectionSettingData = kvmredirection.NewKVMRedirectionSettingDataWithClient(wsmanMessageCreator, client)
5253
m.HTTPProxyService = http.NewHTTPProxyServiceWithClient(wsmanMessageCreator, client)
54+
m.HTTPProxyAccessPointService = http.NewHTTPProxyAccessPointServiceWithClient(wsmanMessageCreator, client)
5355

5456
return m
5557
}

0 commit comments

Comments
 (0)