home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / Complete_W1770747172004.psc / WISPA / dllsrc / CInterfaceEnumeration.cls < prev    next >
Text File  |  2004-04-17  |  4KB  |  119 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "CInterfaceEnumeration"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = True
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
  15. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  16. ' *************************************************************************************************
  17. ' Copyright (C) Chris Waddell
  18. '
  19. ' This program is free software; you can redistribute it and/or modify
  20. ' it under the terms of the GNU General Public License as published by
  21. ' the Free Software Foundation; either version 2, or (at your option)
  22. ' any later version.
  23. '
  24. ' This program is distributed in the hope that it will be useful,
  25. ' but WITHOUT ANY WARRANTY; without even the implied warranty of
  26. ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27. ' GNU General Public License for more details.
  28. '
  29. ' You should have received a copy of the GNU General Public License
  30. ' along with this program; if not, write to the Free Software
  31. ' Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  32. '
  33. ' Please consult the LICENSE.txt file included with this project for
  34. ' more details
  35. '
  36. ' *************************************************************************************************
  37. Option Explicit
  38.  
  39.  
  40. ' *************************************************************************************************
  41. ' Raised whenever an error occurs.
  42. ' *************************************************************************************************
  43. Public Event OnError(Exception As CWinsockException)
  44.  
  45.  
  46. ' A collection of protocols
  47. Private m_colInterfaces As Collection
  48.  
  49.  
  50. ' *************************************************************************************************
  51. ' Get an individual protocol item.
  52. ' *************************************************************************************************
  53. Public Property Get Item(Key As Variant) As CInterface
  54.   On Error Resume Next ' Just incase index doesn't exist
  55.     Set Item = m_colInterfaces(Key)
  56. End Property
  57.  
  58.  
  59. ' *************************************************************************************************
  60. ' Get the protocol count.
  61. ' *************************************************************************************************
  62. Public Property Get Count() As Long
  63.     Count = m_colInterfaces.Count
  64. End Property
  65.  
  66.  
  67. Public Sub Initialize()
  68.  
  69.   Dim InBuffer          As Long
  70.   Dim OutBuffer(0 To 9) As API_INTERFACE_INFO
  71.   Dim BytesReturned     As Long
  72.   Dim NumberInterfaces  As Long, i As Long
  73.   Dim lngSocketHandle   As Long
  74.   Dim Interface         As CInterface
  75.   Dim ErrorObject       As CWinsockException
  76.  
  77.     ' Attempt to create the socket
  78.     lngSocketHandle = api_Socket(AF_INET, SOCK_RAW, IPPROTO_RAW)
  79.  
  80.     ' Check for an error
  81.     If lngSocketHandle = INVALID_SOCKET Then
  82.         Set ErrorObject = New CWinsockException
  83.         ErrorObject.Source = "CInterfaceEnumeration.Initialize"
  84.         RaiseEvent OnError(ErrorObject)
  85.         Exit Sub
  86.     End If
  87.  
  88.     ' Call WSAIoctl in order to get an interface list.
  89.     ' The outbuffer is an array of interfaces and BytesReturned contains
  90.     ' the number of bytes of the outbuffer which was used
  91.     If api_WSAIoctl(lngSocketHandle, SIO_GET_INTERFACE_LIST, InBuffer, LenB(InBuffer), OutBuffer(0), LenB(OutBuffer(0)) * 10, BytesReturned, ByVal 0&, ByVal 0&) = SOCKET_ERROR Then
  92.         Set ErrorObject = New CWinsockException
  93.         ErrorObject.Source = "CInterfaceEnumeration.Initialize"
  94.         RaiseEvent OnError(ErrorObject)
  95.         Exit Sub
  96.     End If
  97.  
  98.     ' Calculate the number of interfaces
  99.     NumberInterfaces = BytesReturned / LenB(OutBuffer(0))
  100.     
  101.     Set m_colInterfaces = New Collection
  102.  
  103.     ' Loop through each interface
  104.     For i = 0 To NumberInterfaces - 1
  105.         Set Interface = New CInterface
  106.  
  107.         Interface.GetInterfaceByStructPtr VarPtr(OutBuffer(i))
  108.         m_colInterfaces.Add Interface
  109.  
  110.         Set Interface = Nothing
  111.     Next i
  112.  
  113. End Sub
  114.  
  115.  
  116. Private Sub Class_Terminate()
  117.     Set m_colInterfaces = Nothing
  118. End Sub
  119.