#include "hnetcfg_private.h"
+#include <ole2.h>
+
typedef struct fw_port
{
INetFwOpenPort INetFwOpenPort_iface;
LONG refs;
+ BSTR name;
+ NET_FW_IP_PROTOCOL protocol;
+ LONG port;
} fw_port;
static inline fw_port *impl_from_INetFwOpenPort( INetFwOpenPort *iface )
if (!refs)
{
TRACE("destroying %p\n", fw_port);
+ SysFreeString( fw_port->name );
HeapFree( GetProcessHeap(), 0, fw_port );
}
return refs;
{
fw_port *This = impl_from_INetFwOpenPort( iface );
- FIXME("%p %s\n", This, debugstr_w(name));
- return E_NOTIMPL;
+ TRACE("%p %s\n", This, debugstr_w(name));
+
+ if (!(name = SysAllocString( name )))
+ return E_OUTOFMEMORY;
+
+ SysFreeString( This->name );
+ This->name = name;
+ return S_OK;
}
static HRESULT WINAPI fw_port_get_IpVersion(
{
fw_port *This = impl_from_INetFwOpenPort( iface );
- FIXME("%p %u\n", This, ipProtocol);
- return E_NOTIMPL;
+ TRACE("%p %u\n", This, ipProtocol);
+
+ if (ipProtocol != NET_FW_IP_PROTOCOL_TCP && ipProtocol != NET_FW_IP_PROTOCOL_UDP)
+ return E_INVALIDARG;
+
+ This->protocol = ipProtocol;
+ return S_OK;
}
static HRESULT WINAPI fw_port_get_Port(
{
fw_port *This = impl_from_INetFwOpenPort( iface );
- FIXME("%p %d\n", This, portNumber);
- return E_NOTIMPL;
+ TRACE("%p %d\n", This, portNumber);
+ This->port = portNumber;
+ return S_OK;
}
static HRESULT WINAPI fw_port_get_Scope(
fw_port *This = impl_from_INetFwOpenPort( iface );
FIXME("%p %d\n", This, enabled);
- return E_NOTIMPL;
+ return S_OK;
}
static HRESULT WINAPI fw_port_get_BuiltIn(
fp->INetFwOpenPort_iface.lpVtbl = &fw_port_vtbl;
fp->refs = 1;
+ fp->name = NULL;
+ fp->protocol = NET_FW_IP_PROTOCOL_TCP;
+ fp->port = 0;
*ppObj = &fp->INetFwOpenPort_iface;
{
fw_ports *This = impl_from_INetFwOpenPorts( iface );
- FIXME("%p %p\n", This, pctinfo);
- return E_NOTIMPL;
+ TRACE("%p %p\n", This, pctinfo);
+ *pctinfo = 1;
+ return S_OK;
}
static HRESULT WINAPI fw_ports_GetTypeInfo(
{
fw_ports *This = impl_from_INetFwOpenPorts( iface );
- FIXME("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo);
- return E_NOTIMPL;
+ TRACE("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo);
+ return get_typeinfo( INetFwOpenPorts_tid, ppTInfo );
}
static HRESULT WINAPI fw_ports_GetIDsOfNames(
DISPID *rgDispId )
{
fw_ports *This = impl_from_INetFwOpenPorts( iface );
+ ITypeInfo *typeinfo;
+ HRESULT hr;
- FIXME("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
- return E_NOTIMPL;
+ TRACE("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
+
+ hr = get_typeinfo( INetFwOpenPorts_tid, &typeinfo );
+ if (SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_GetIDsOfNames( typeinfo, rgszNames, cNames, rgDispId );
+ ITypeInfo_Release( typeinfo );
+ }
+ return hr;
}
static HRESULT WINAPI fw_ports_Invoke(
UINT *puArgErr )
{
fw_ports *This = impl_from_INetFwOpenPorts( iface );
+ ITypeInfo *typeinfo;
+ HRESULT hr;
- FIXME("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid),
+ TRACE("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
- return E_NOTIMPL;
+
+ hr = get_typeinfo( INetFwOpenPorts_tid, &typeinfo );
+ if (SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_Invoke( typeinfo, &This->INetFwOpenPorts_iface, dispIdMember,
+ wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr );
+ ITypeInfo_Release( typeinfo );
+ }
+ return hr;
}
static HRESULT WINAPI fw_ports_get_Count(