- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
/*++
Intel Corporation Proprietary Information
Copyright (c) 1995 Intel Corporation
This listing is supplied under the terms of a license agreement with
Intel Corporation and may not be used, copied, nor disclosed except in
accordance with the terms of that agreeement.
Module Name:
addrconv.c
Abstract:
This module contains the address conversion routines from the
winsock2 API. This module contains the following functions.
htonl()
htons()
ntohl()
ntohs()
inet_addr()
inet_ntoa()
WSAHtonl()
WSAHtons()
WSANtohl()
WSANtohs()
Author:
Dirk Brandewie <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="56323f243d163b3f383d783f3822333a7835393b">[email protected]</a> 14-06-1995
[Environment:]
[Notes:]
Revision History:
22-Aug-1995 <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="adc9c4dfc6edc0c4c3c683c4c3d9c8c183cec2c0">[email protected]</a>
Cleanup after code review. Moved includes to precomp.h
--*/
#include "precomp.h"
// these defines are used to check if address parts are in range
#define MAX_EIGHT_BIT_VALUE 0xff
#define MAX_SIXTEEN_BIT_VALUE 0xffff
#define MAX_TWENTY_FOUR_BIT_VALUE 0xffffff
// Defines for different based numbers in an address
#define BASE_TEN 10
#define BASE_EIGHT 8
#define BASE_SIXTEEN 16
//
// Macros for swapping the bytes in a long and a short.
//
#define SWAP_LONG(l) \
( ( ((l) >> 24) & 0x000000FFL ) | \
( ((l) >> 8) & 0x0000FF00L ) | \
( ((l) << 8) & 0x00FF0000L ) | \
( ((l) << 24) & 0xFF000000L ) )
#define WS_SWAP_SHORT(s) \
( ( ((s) >> 8) & 0x00FF ) | \
( ((s) << 8) & 0xFF00 ) )
//
// This preinitialized array defines the strings to be used for
// inet_ntoa. The index of each row corresponds to the value for a byte
// in an IP address. The first three bytes of each row are the
// char/string value for the byte, and the fourth byte in each row is
// the length of the string required for the byte. This approach
// allows a fast implementation with no jumps.
//
BYTE NToACharStrings[][4] = {
'0', 'x', 'x', 1,
'1', 'x', 'x', 1,
'2', 'x', 'x', 1,
'3', 'x', 'x', 1,
'4', 'x', 'x', 1,
'5', 'x', 'x', 1,
'6', 'x', 'x', 1,
'7', 'x', 'x', 1,
'8', 'x', 'x', 1,
'9', 'x', 'x', 1,
'1', '0', 'x', 2,
'1', '1', 'x', 2,
'1', '2', 'x', 2,
'1', '3', 'x', 2,
'1', '4', 'x', 2,
'1', '5', 'x', 2,
'1', '6', 'x', 2,
Комментарии (0) RSS