| 1 |
|
|---|
| 2 | /*!
|
|---|
| 3 | @brief sockaddr構造体のラップ
|
|---|
| 4 | @author OverTaker
|
|---|
| 5 | @date 2008/10/08
|
|---|
| 6 | */
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 | Namespace System
|
|---|
| 11 | Namespace Net
|
|---|
| 12 |
|
|---|
| 13 | Class SocketAddress
|
|---|
| 14 | item As *Byte
|
|---|
| 15 | itemSize As Long
|
|---|
| 16 | Public
|
|---|
| 17 |
|
|---|
| 18 | /*!
|
|---|
| 19 | @brief コンストラクタ。アドレスファミリを指定して初期化する。
|
|---|
| 20 | @param アドレスファミリ
|
|---|
| 21 | */
|
|---|
| 22 | Sub SocketAddress(family As Sockets.AddressFamily)
|
|---|
| 23 | Select Case family
|
|---|
| 24 | Case System.Net.Sockets.AddressFamily.InterNetwork
|
|---|
| 25 | init(family, SizeOf(sockaddr_in))
|
|---|
| 26 | Case System.Net.Sockets.AddressFamily.InterNetworkV6
|
|---|
| 27 | init(family, SizeOf(sockaddr_in6))
|
|---|
| 28 | Case Else
|
|---|
| 29 | init(family, SizeOf(sockaddr))
|
|---|
| 30 | End Select
|
|---|
| 31 | End Sub
|
|---|
| 32 |
|
|---|
| 33 | /*!
|
|---|
| 34 | @brief コンストラクタ。アドレスファミリと大きさを指定して初期化する。
|
|---|
| 35 | @param アドレスファミリ
|
|---|
| 36 | @param 大きさ
|
|---|
| 37 | */
|
|---|
| 38 | Sub SocketAddress(family As Sockets.AddressFamily, size As Long)
|
|---|
| 39 | init(family, size)
|
|---|
| 40 | End Sub
|
|---|
| 41 |
|
|---|
| 42 | /*!
|
|---|
| 43 | @brief コンストラクタ。sockaddrを指定して初期化する
|
|---|
| 44 | @param sockaddr構造体
|
|---|
| 45 | @note このコンストラクタはライブラリ内でのみ使用する目的で作られています。
|
|---|
| 46 | */
|
|---|
| 47 | Sub SocketAddress(addr As *sockaddr, len As Long)
|
|---|
| 48 | itemSize = len
|
|---|
| 49 | item = malloc(itemSize)
|
|---|
| 50 | memcpy(item, addr, itemSize)
|
|---|
| 51 | End Sub
|
|---|
| 52 |
|
|---|
| 53 | /*!
|
|---|
| 54 | @brief デストラクタ
|
|---|
| 55 | */
|
|---|
| 56 | Sub ~SocketAddress()
|
|---|
| 57 | If item <> NULL Then free(item)
|
|---|
| 58 | End Sub
|
|---|
| 59 |
|
|---|
| 60 | /*!
|
|---|
| 61 | @brief アドレスファミリを取得する
|
|---|
| 62 | @return アドレスファミリ
|
|---|
| 63 | */
|
|---|
| 64 | Function AddressFamily() As Sockets.AddressFamily
|
|---|
| 65 | Return New Sockets.AddressFamily(Items->sa_family, "AddressFamily")
|
|---|
| 66 | End Function
|
|---|
| 67 |
|
|---|
| 68 | /*!
|
|---|
| 69 | @brief sockaddrを取得する
|
|---|
| 70 | @return sockaddrを示すアドレス
|
|---|
| 71 | */
|
|---|
| 72 | Function Items() As *sockaddr
|
|---|
| 73 | Return item As *sockaddr
|
|---|
| 74 | End Function
|
|---|
| 75 |
|
|---|
| 76 | /*!
|
|---|
| 77 | @brief sockaddrの大きさを取得する
|
|---|
| 78 | @return sockaddrの大きさ
|
|---|
| 79 | */
|
|---|
| 80 | Function Size() As Long
|
|---|
| 81 | Return itemSize
|
|---|
| 82 | End Function
|
|---|
| 83 |
|
|---|
| 84 | /*!
|
|---|
| 85 | @brief 等しいかどうかを取得する
|
|---|
| 86 | @retval True 等しい
|
|---|
| 87 | @retval False 等しくない
|
|---|
| 88 | */
|
|---|
| 89 | Function Equals(address As SocketAddress) As Boolean
|
|---|
| 90 | If This.Size = address.Size Then
|
|---|
| 91 | Dim i As Long
|
|---|
| 92 | For i = 0 To ELM(Size)
|
|---|
| 93 | If This.item[i] <> address.item[i] Then Return False
|
|---|
| 94 | Next
|
|---|
| 95 | Return True
|
|---|
| 96 | Else
|
|---|
| 97 | Return False
|
|---|
| 98 | End If
|
|---|
| 99 | End Function
|
|---|
| 100 |
|
|---|
| 101 | Private
|
|---|
| 102 |
|
|---|
| 103 | /*!
|
|---|
| 104 | @brief 初期化する
|
|---|
| 105 | @param アドレスファミリ
|
|---|
| 106 | @param 確保するsockaddrの大きさ
|
|---|
| 107 | */
|
|---|
| 108 | Sub init(family As DWord, size As Long)
|
|---|
| 109 | itemSize = size
|
|---|
| 110 | item = calloc( itemSize )
|
|---|
| 111 | Items->sa_family = family As Word
|
|---|
| 112 | End Sub
|
|---|
| 113 | End Class
|
|---|
| 114 |
|
|---|
| 115 | End Namespace
|
|---|
| 116 | End Namespace
|
|---|