ReactOS 0.4.17-dev-1190-g4c812f4
utility.c File Reference
#include "ws2tcpip.h"
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "windef.h"
#include "winbase.h"
#include "wininet.h"
#include "winnls.h"
#include "wine/debug.h"
#include "internet.h"
Include dependency graph for utility.c:

Go to the source code of this file.

Macros

#define FE(x)   { x, #x }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (wininet)
 
BOOL GetAddress (const WCHAR *name, INTERNET_PORT port, struct sockaddr *psa, int *sa_len, char *addr_str)
 
static const char * get_callback_name (DWORD dwInternetStatus)
 
static const char * debugstr_status_info (DWORD status, void *info)
 
void INTERNET_SendCallback (object_header_t *hdr, DWORD_PTR context, DWORD status, void *info, DWORD info_len)
 

Macro Definition Documentation

◆ FE

#define FE (   x)    { x, #x }

Function Documentation

◆ debugstr_status_info()

static const char * debugstr_status_info ( DWORD  status,
void *  info 
)
static

Definition at line 142 of file utility.c.

143{
144 switch(status) {
147 return wine_dbg_sprintf("{%s, %ld}", wine_dbgstr_longlong(iar->dwResult), iar->dwError);
148 }
149 default:
150 return wine_dbg_sprintf("%p", info);
151 }
152}
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:296
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
DWORD_PTR dwResult
Definition: wininet.h:155
Definition: ps.c:97
#define INTERNET_STATUS_REQUEST_COMPLETE
Definition: wininet.h:898

Referenced by INTERNET_SendCallback().

◆ get_callback_name()

static const char * get_callback_name ( DWORD  dwInternetStatus)
static

Definition at line 104 of file utility.c.

104 {
105 static const wininet_flag_info internet_status[] = {
106#define FE(x) { x, #x }
132#undef FE
133 };
134 DWORD i;
135
136 for (i = 0; i < ARRAY_SIZE(internet_status); i++) {
137 if (internet_status[i].val == dwInternetStatus) return internet_status[i].name;
138 }
139 return "Unknown";
140}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FE(x)
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLfloat * val
Definition: glext.h:7180
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
const char * name
Definition: internet.h:436
#define INTERNET_STATUS_RECEIVING_RESPONSE
Definition: wininet.h:889
#define INTERNET_STATUS_CONNECTION_CLOSED
Definition: wininet.h:894
#define INTERNET_STATUS_STATE_CHANGE
Definition: wininet.h:902
#define INTERNET_STATUS_REQUEST_SENT
Definition: wininet.h:888
#define INTERNET_STATUS_COOKIE_RECEIVED
Definition: wininet.h:904
#define INTERNET_STATUS_USER_INPUT_REQUIRED
Definition: wininet.h:901
#define INTERNET_STATUS_SENDING_REQUEST
Definition: wininet.h:887
#define INTERNET_STATUS_PREFETCH
Definition: wininet.h:892
#define INTERNET_STATUS_HANDLE_CLOSING
Definition: wininet.h:896
#define INTERNET_STATUS_RESOLVING_NAME
Definition: wininet.h:883
#define INTERNET_STATUS_INTERMEDIATE_RESPONSE
Definition: wininet.h:900
#define INTERNET_STATUS_RESPONSE_RECEIVED
Definition: wininet.h:890
#define INTERNET_STATUS_REDIRECT
Definition: wininet.h:899
#define INTERNET_STATUS_CONNECTING_TO_SERVER
Definition: wininet.h:885
#define INTERNET_STATUS_HANDLE_CREATED
Definition: wininet.h:895
#define INTERNET_STATUS_COOKIE_HISTORY
Definition: wininet.h:908
#define INTERNET_STATUS_COOKIE_SENT
Definition: wininet.h:903
#define INTERNET_STATUS_CONNECTED_TO_SERVER
Definition: wininet.h:886
#define INTERNET_STATUS_NAME_RESOLVED
Definition: wininet.h:884
#define INTERNET_STATUS_CTL_RESPONSE_RECEIVED
Definition: wininet.h:891
#define INTERNET_STATUS_P3P_HEADER
Definition: wininet.h:906
#define INTERNET_STATUS_CLOSING_CONNECTION
Definition: wininet.h:893
#define INTERNET_STATUS_PRIVACY_IMPACTED
Definition: wininet.h:905
#define INTERNET_STATUS_P3P_POLICYREF
Definition: wininet.h:907

Referenced by INTERNET_SendCallback().

◆ GetAddress()

BOOL GetAddress ( const WCHAR *  name,
INTERNET_PORT  port,
struct sockaddr *  psa,
int *  sa_len,
char *  addr_str 
)

Definition at line 47 of file utility.c.

48{
50 void *addr = NULL;
51 int ret;
52
53 TRACE("%s\n", debugstr_w(name));
54
55 memset( &hints, 0, sizeof(hints) );
56 /* Prefer IPv4 to IPv6 addresses, since some servers do not listen on
57 * their IPv6 addresses even though they have IPv6 addresses in the DNS.
58 */
59 hints.ai_family = AF_INET;
60
62 if (ret != 0)
63 {
64 TRACE("failed to get IPv4 address of %s, retrying with IPv6\n", debugstr_w(name));
65 hints.ai_family = AF_INET6;
67 }
68 if (ret != 0)
69 {
70 TRACE("failed to get address of %s\n", debugstr_w(name));
71 return FALSE;
72 }
73 if (*sa_len < res->ai_addrlen)
74 {
75 WARN("address too small\n");
77 return FALSE;
78 }
79 *sa_len = res->ai_addrlen;
80 memcpy( psa, res->ai_addr, res->ai_addrlen );
81 /* Copy port */
82 switch (res->ai_family)
83 {
84 case AF_INET:
85 addr = &((struct sockaddr_in *)psa)->sin_addr;
86 ((struct sockaddr_in *)psa)->sin_port = htons(port);
87 break;
88 case AF_INET6:
89 addr = &((struct sockaddr_in6 *)psa)->sin6_addr;
90 ((struct sockaddr_in6 *)psa)->sin6_port = htons(port);
91 break;
92 }
93
94 if(addr_str)
95 inet_ntop(res->ai_family, addr, addr_str, INET6_ADDRSTRLEN);
97 return TRUE;
98}
#define FreeAddrInfoW(a)
Definition: addrinfo.c:21
INT WSAAPI GetAddrInfoW(IN PCWSTR pszNodeName, IN PCWSTR pszServiceName, IN const ADDRINFOW *ptHints, OUT PADDRINFOW *pptResult)
Definition: addrinfo.c:509
#define WARN(fmt,...)
Definition: precomp.h:61
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
USHORT port
Definition: uri.c:210
return ret
Definition: mutex.c:147
#define AF_INET
Definition: tcpip.h:117
GLuint res
Definition: glext.h:9613
GLenum const GLvoid * addr
Definition: glext.h:9621
#define debugstr_w
Definition: kernel32.h:32
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define htons(x)
Definition: module.h:215
#define memset(x, y, z)
Definition: compat.h:39
namespace GUID const ADDRINFOEXW * hints
Definition: sock.c:80
#define TRACE(s)
Definition: solgame.cpp:4
Definition: name.c:39
const char *WSAAPI inet_ntop(int af, const void *src, char *dst, size_t cnt)
Definition: unix_func.c:8
#define AF_INET6
Definition: winsock.h:363
#define INET6_ADDRSTRLEN
Definition: ws2ipdef.h:132

Referenced by DECLARE_INTERFACE_(), FTP_Connect(), HTTP_ResolveName(), and InternetCheckConnectionW().

◆ INTERNET_SendCallback()

void INTERNET_SendCallback ( object_header_t *  hdr,
DWORD_PTR  context,
DWORD  status,
void *  info,
DWORD  info_len 
)

Definition at line 154 of file utility.c.

155{
156 void *new_info = info;
157
158 if( !hdr->lpfnStatusCB )
159 return;
160
161 /* the IE5 version of wininet does not
162 send callbacks if dwContext is zero */
163 if(!context)
164 return;
165
166 switch(status) {
170 new_info = malloc(info_len);
171 if(new_info)
172 memcpy(new_info, info, info_len);
173 break;
176 if(hdr->dwInternalFlags & INET_CALLBACKW) {
177 new_info = wcsdup(info);
178 break;
179 }else {
180 new_info = strdupWtoA(info);
181 info_len = strlen(new_info)+1;
182 break;
183 }
184 }
185
186 TRACE(" callback(%p) (%p (%p), %08Ix, %ld (%s), %s, %ld)\n",
187 hdr->lpfnStatusCB, hdr->hInternet, hdr, context, status, get_callback_name(status),
188 debugstr_status_info(status, new_info), info_len);
189
190 hdr->lpfnStatusCB(hdr->hInternet, context, status, new_info, info_len);
191
192 TRACE(" end callback().\n");
193
194 if(new_info != info)
195 free(new_info);
196}
static char * strdupWtoA(const WCHAR *str)
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
static const char * debugstr_status_info(DWORD status, void *info)
Definition: utility.c:142
static const char * get_callback_name(DWORD dwInternetStatus)
Definition: utility.c:104
#define INET_CALLBACKW
Definition: internet.h:210
char hdr[14]
Definition: iptest.cpp:33
Definition: http.c:7783

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( wininet  )