Back

// PSLNetwork.cpp : Implementation of CPSLNetwork

#include "stdafx.h"
#include "PSLNetwork.h"
#include "PSLIPv4.h"
#include "PSLIPv6.h"
#include "ProSysModule.h"
#include <lm.h>

CPSLNetwork::CPSLNetwork()
{
   // Not needed yet!
   //_Module.InitWinSockets(); // Initialize WinSockets;

   tstring pcName;
   DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
   pcName.resize(dwSize);
   ::GetComputerName((LPTSTR)pcName.c_str(), &dwSize);
   m_sPCName = pcName.c_str();
}

HRESULT CPSLNetwork::FinalConstruct()
{
   return S_OK;
}

void CPSLNetwork::FinalRelease()
{
}

////////////////////////////////////////////////////////////////////////
// Interface Implementation;
////////////////////////////////////////////////////////////////////////

STDMETHODIMP CPSLNetwork::get_PCName(BSTR * pValue)
{
   PSL_BEGIN

   *pValue = m_sPCName.copy();

   PSL_END
}

STDMETHODIMP CPSLNetwork::get_DomainName(BSTR * pValue)
{
   PSL_BEGIN

   _bstr_t name(_T(""));
   LPWKSTA_INFO_100 pBuffer = NULL;
   DWORD dwStatus = ::NetWkstaGetInfo(NULL, 100, (LPBYTE*)&pBuffer);
   if(dwStatus == NERR_Success)
   {
      name = pBuffer->wki100_langroup;
      ::NetApiBufferFree(pBuffer);
   }
   else
      if(dwStatus == ERROR_ACCESS_DENIED)
         return MakeException(EX_NOACCESS);

   *pValue = name.copy();

   PSL_END
}

STDMETHODIMP CPSLNetwork::IPv4FromString(BSTR Address, IPSLIPv4 ** ppValue)
{
   PSL_BEGIN

   *ppValue = NULL;
   CComObject<CPSLIPv4> * pIPv4 = NULL;
   if(CComObject<CPSLIPv4>::CreateInstance(&pIPv4) == S_OK)
   {
      pIPv4->AddRef();
      bool bValid = true;
      if(Address)
      {
         _bstr_t sAddress(_T(""));
         if(Address)
            sAddress = Address;
         bValid = pIPv4->Initialize(sAddress, true);
      }
      if(bValid)
         *ppValue = CComPtr<IPSLIPv4>(pIPv4);
      else
      {
         pIPv4->Release();
         SetException(EX_INVALIDPARAMETER);
      }
   }

   PSL_END
}

STDMETHODIMP CPSLNetwork::IPv6FromString(BSTR Address, IPSLIPv6 ** ppValue)
{
   PSL_BEGIN

   *ppValue = NULL;
   CComObject<CPSLIPv6> * pIPv6 = NULL;
   if(CComObject<CPSLIPv6>::CreateInstance(&pIPv6) == S_OK)
   {
      pIPv6->AddRef();
      bool bValid = true;
      if(Address)
      {
         _bstr_t sAddress(_T(""));
         if(Address)
            sAddress = Address;
         bValid = pIPv6->Initialize(sAddress, true);
      }
      if(bValid)
         *ppValue = CComPtr<IPSLIPv6>(pIPv6);
      else
      {
         pIPv6->Release();
         SetException(EX_INVALIDPARAMETER);
      }
   }

   PSL_END
}

Top