~ubuntu-branches/ubuntu/quantal/php5/quantal

« back to all changes in this revision

Viewing changes to win32/inet.c

  • Committer: Bazaar Package Importer
  • Author(s): Sean Finney
  • Date: 2009-07-01 09:12:10 UTC
  • mto: (0.9.1) (1.1.17 upstream)
  • mto: This revision was merged to the branch mainline in revision 58.
  • Revision ID: james.westby@ubuntu.com-20090701091210-go0h6506p62on17r
Tags: upstream-5.3.0
ImportĀ upstreamĀ versionĀ 5.3.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "config.w32.h"
 
2
#if (_WIN32_WINNT < 0x0600) /* Vista/2k8 have these functions */
 
3
#include "php.h"
 
4
#include <winsock2.h>
 
5
#include <windows.h>
 
6
#include <Ws2tcpip.h>
 
7
 
 
8
#include "inet.h"
 
9
 
 
10
PHPAPI int inet_pton(int af, const char* src, void* dst)
 
11
{
 
12
        int address_length;
 
13
        struct sockaddr_storage sa;
 
14
        struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
 
15
        struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
 
16
 
 
17
        switch (af) {
 
18
                case AF_INET:
 
19
                        address_length = sizeof (struct sockaddr_in);
 
20
                        break;
 
21
 
 
22
                case AF_INET6:
 
23
                        address_length = sizeof (struct sockaddr_in6);
 
24
                        break;
 
25
 
 
26
                default:
 
27
                        return -1;
 
28
        }
 
29
 
 
30
        if (WSAStringToAddress ((LPTSTR) src, af, NULL, (LPSOCKADDR) &sa, &address_length) == 0) {
 
31
                switch (af) {
 
32
                        case AF_INET:
 
33
                                memcpy (dst, &sin->sin_addr, sizeof (struct in_addr));
 
34
                                break;
 
35
 
 
36
                        case AF_INET6:
 
37
                                memcpy (dst, &sin6->sin6_addr, sizeof (struct in6_addr));
 
38
                                break;
 
39
                }
 
40
                return 1;
 
41
        }
 
42
 
 
43
        return 0;
 
44
}
 
45
 
 
46
PHPAPI const char* inet_ntop(int af, const void* src, char* dst, size_t size)
 
47
{
 
48
        int address_length;
 
49
        DWORD string_length = size;
 
50
        struct sockaddr_storage sa;
 
51
        struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
 
52
        struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
 
53
 
 
54
        memset (&sa, 0, sizeof (sa));
 
55
        switch (af) {
 
56
                case AF_INET:
 
57
                        address_length = sizeof (struct sockaddr_in);
 
58
                        sin->sin_family = af;
 
59
                        memcpy (&sin->sin_addr, src, sizeof (struct in_addr));
 
60
                        break;
 
61
 
 
62
                case AF_INET6:
 
63
                        address_length = sizeof (struct sockaddr_in6);
 
64
                        sin6->sin6_family = af;
 
65
                        memcpy (&sin6->sin6_addr, src, sizeof (struct in6_addr));
 
66
                        break;
 
67
 
 
68
                default:
 
69
                        return NULL;
 
70
        }
 
71
 
 
72
        if (WSAAddressToString ((LPSOCKADDR) &sa, address_length, NULL, dst, &string_length) == 0) {
 
73
                return dst;
 
74
        }
 
75
 
 
76
        return NULL;
 
77
}
 
78
 
 
79
int inet_aton(const char *cp, struct in_addr *inp) {
 
80
  inp->s_addr = inet_addr(cp);
 
81
 
 
82
  if (inp->s_addr == INADDR_NONE) {
 
83
          return 0;
 
84
  }
 
85
 
 
86
  return 1;
 
87
}
 
88
#endif