43 *
ppv = &
This->IInternetProtocol_iface;
45 TRACE(
"(%p)->(IID_IInternetProtocolRoot %p)\n",
This,
ppv);
46 *
ppv = &
This->IInternetProtocol_iface;
49 *
ppv = &
This->IInternetProtocol_iface;
51 TRACE(
"(%p)->(IID_IInternetProtocolSink %p)\n",
This,
ppv);
52 *
ppv = &
This->IInternetProtocolSink_iface;
56 IInternetProtocol_AddRef(iface);
101 FIXME(
"(%p)->(%p)\n",
This, pProtocolData);
138 FIXME(
"(%p)->(%p %lu %p)\n",
This, pv,
cb, pcbRead);
146 FIXME(
"(%p)->(%ld %ld %p)\n",
This, dlibMove.
u.LowPart, dwOrigin, plibNewPosition);
189 return IInternetProtocol_QueryInterface(&
This->IInternetProtocol_iface,
riid,
ppv);
195 return IInternetProtocol_AddRef(&
This->IInternetProtocol_iface);
201 return IInternetProtocol_Release(&
This->IInternetProtocol_iface);
205 PROTOCOLDATA *pProtocolData)
208 FIXME(
"(%p)->(%p)\n",
This, pProtocolData);
224 FIXME(
"(%p)->(%ld %lu %lu)\n",
This, grfBSCF, ulProgress, ulProgressMax);
250 TRACE(
"(%p %p)\n", pUnkOuter, ppobj);
260 *ppobj = &
ret->IInternetProtocol_iface;
275 && (
b[1] ==
'h' ||
b[1] ==
'H')
276 && (
b[2] ==
't' ||
b[2] ==
'T')
277 && (
b[3] ==
'm' ||
b[3] ==
'M')
278 && (
b[4] ==
'l' ||
b[4] ==
'L'))
280 && (
b[1] ==
'h' ||
b[1] ==
'H')
281 && (
b[2] ==
'e' ||
b[2] ==
'E')
282 && (
b[3] ==
'a' ||
b[3] ==
'A')
283 && (
b[4] ==
'd' ||
b[4] ==
'D'))
285 && (
b[1] ==
'b' ||
b[1] ==
'B')
286 && (
b[2] ==
'o' ||
b[2] ==
'O')
287 && (
b[3] ==
'd' ||
b[3] ==
'D')
288 && (
b[4] ==
'y' ||
b[4] ==
'Y')))
return TRUE;
298 if(
b[0] ==
'<' &&
b[1] ==
'?'
299 && (
b[2] ==
'x' ||
b[2] ==
'X')
300 && (
b[3] ==
'm' ||
b[3] ==
'M')
301 && (
b[4] ==
'l' ||
b[4] ==
'L')
302 &&
b[5] ==
' ')
return TRUE;
310 &&
b[0] ==
'.' &&
b[1] ==
's' &&
b[2] ==
'n' &&
b[3] ==
'd';
316 &&
b[0] ==
'R' &&
b[1] ==
'I' &&
b[2] ==
'F' &&
b[3] ==
'F'
317 &&
b[8] ==
'W' &&
b[9] ==
'A' &&
b[10] ==
'V' &&
b[11] ==
'E';
323 && (
b[0] ==
'G' ||
b[0] ==
'g')
324 && (
b[1] ==
'I' ||
b[1] ==
'i')
325 && (
b[2] ==
'F' ||
b[2] ==
'f')
327 && (
b[4] ==
'7' ||
b[4] ==
'9')
328 && (
b[5] ==
'A' ||
b[5] ==
'a');
333 return size > 2 &&
b[0] == 0xff &&
b[1] == 0xd8;
338 static const BYTE magic1[] = {0x4d,0x4d,0x00,0x2a};
339 static const BYTE magic2[] = {0x49,0x49,0x2a,0xff};
346 static const BYTE xpng_header[] = {0x89,
'P',
'N',
'G',0x0d,0x0a,0x1a,0x0a};
347 return size >
sizeof(xpng_header) && !
memcmp(
b, xpng_header,
sizeof(xpng_header));
353 &&
b[0] == 0x42 &&
b[1] == 0x4d
354 && *(
const DWORD *)(
b+6) == 0;
360 &&
b[0] ==
'R' &&
b[1] ==
'I' &&
b[2] ==
'F' &&
b[3] ==
'F'
361 &&
b[8] ==
'A' &&
b[9] ==
'V' &&
b[10] ==
'I' &&
b[11] == 0x20;
367 && !
b[0] && !
b[1] &&
b[2] == 0x01
368 && (
b[3] == 0xb3 ||
b[3] == 0xba);
373 return size > 2 &&
b[0] ==
'%' &&
b[1] ==
'!';
378 return size > 4 &&
b[0] == 0x25 &&
b[1] == 0x50 &&
b[2] == 0x44 &&
b[3] == 0x46;
383 return size > 2 &&
b[0] == 0x50 &&
b[1] == 0x4b;
388 return size > 2 &&
b[0] == 0x1f &&
b[1] == 0x8b;
393 return size > 4 &&
b[0] == 0xca &&
b[1] == 0xfe &&
b[2] == 0xba &&
b[3] == 0xbe;
398 return size > 2 &&
b[0] ==
'M' &&
b[1] ==
'Z';
403 if(
b < 0x20 &&
b !=
'\n' &&
b !=
'\r' &&
b !=
'\t')
454 for(end_ptr =
url; *end_ptr; end_ptr++) {
455 if(*end_ptr ==
'?' || *end_ptr ==
'#')
468 unsigned len = end_ptr-
ptr;
540 int len,
i, any_pos_mime = -1;
632 *ret_mime = url_mime;
659 TRACE(
"(%p,%s,%p,%ld,%s,0x%lx,%p,0x%lx)\n", pBC,
debugstr_w(pwzUrl),
pBuffer, cbSize,
663 WARN(
"dwMimeFlags=%08lx\n", dwMimeFlags);
669 if(!ppwzMimeOut || (!pwzUrl && !
pBuffer))
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define RegCloseKey(hKey)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
static __inline const char * debugstr_an(const char *s, int n)
static const WCHAR *const ext[]
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
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
static HRESULT WINAPI MimeFilterProtocol_Read(IInternetProtocol *iface, void *pv, ULONG cb, ULONG *pcbRead)
static const struct @611 mime_filters_any_pos[]
static BOOL video_mpeg_filter(const BYTE *b, DWORD size)
static BOOL audio_basic_filter(const BYTE *b, DWORD size)
static HRESULT WINAPI MimeFilterProtocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
static MimeFilter * impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
HRESULT WINAPI FindMimeFromData(LPBC pBC, LPCWSTR pwzUrl, LPVOID pBuffer, DWORD cbSize, LPCWSTR pwzMimeProposed, DWORD dwMimeFlags, LPWSTR *ppwzMimeOut, DWORD dwReserved)
static HRESULT WINAPI MimeFilterProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved)
static HRESULT WINAPI MimeFilterProtocol_Abort(IInternetProtocol *iface, HRESULT hrReason, DWORD dwOptions)
static BOOL is_known_mime_type(const WCHAR *mime)
static BOOL video_avi_filter(const BYTE *b, DWORD size)
static BOOL image_pjpeg_filter(const BYTE *b, DWORD size)
static HRESULT WINAPI MimeFilterSink_ReportData(IInternetProtocolSink *iface, DWORD grfBSCF, ULONG ulProgress, ULONG ulProgressMax)
static HRESULT WINAPI MimeFilterSink_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppv)
static HRESULT find_mime_from_buffer(const BYTE *buf, DWORD size, const WCHAR *proposed_mime, const WCHAR *url, WCHAR **ret_mime)
static BOOL application_pdf_filter(const BYTE *b, DWORD size)
static BOOL text_html_filter(const BYTE *b, DWORD size)
static const struct @611 mime_filters[]
static HRESULT WINAPI MimeFilterProtocol_UnlockRequest(IInternetProtocol *iface)
static BOOL image_tiff_filter(const BYTE *b, DWORD size)
static BOOL text_richtext_filter(const BYTE *b, DWORD size)
static HRESULT find_mime_from_url(const WCHAR *url, WCHAR **ret)
static HRESULT WINAPI MimeFilterProtocol_LockRequest(IInternetProtocol *iface, DWORD dwOptions)
static BOOL is_text_plain_char(BYTE b)
static BOOL application_xgzip_filter(const BYTE *b, DWORD size)
BOOL(* filter)(const BYTE *, DWORD)
static const IInternetProtocolVtbl MimeFilterProtocolVtbl
HRESULT find_mime_from_ext(const WCHAR *ext, WCHAR **ret)
static BOOL application_octet_stream_filter(const BYTE *b, DWORD size)
static HRESULT WINAPI MimeFilterProtocol_Suspend(IInternetProtocol *iface)
static BOOL application_xmsdownload(const BYTE *b, DWORD size)
static const WCHAR text_plainW[]
static HRESULT WINAPI MimeFilterProtocol_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData)
static BOOL text_plain_filter(const BYTE *b, DWORD size)
static BOOL application_xzip_filter(const BYTE *b, DWORD size)
static HRESULT WINAPI MimeFilterProtocol_Seek(IInternetProtocol *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
static HRESULT WINAPI MimeFilterSink_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData)
static HRESULT WINAPI MimeFilterProtocol_Terminate(IInternetProtocol *iface, DWORD dwOptions)
static const IInternetProtocolSinkVtbl InternetProtocolSinkVtbl
static MimeFilter * impl_from_IInternetProtocol(IInternetProtocol *iface)
static BOOL text_xml_filter(const BYTE *b, DWORD size)
static BOOL application_java_filter(const BYTE *b, DWORD size)
static BOOL image_bmp_filter(const BYTE *b, DWORD size)
static HRESULT WINAPI MimeFilterProtocol_Resume(IInternetProtocol *iface)
static BOOL audio_wav_filter(const BYTE *b, DWORD size)
static BOOL image_gif_filter(const BYTE *b, DWORD size)
static ULONG WINAPI MimeFilterSink_Release(IInternetProtocolSink *iface)
static BOOL image_xpng_filter(const BYTE *b, DWORD size)
static const WCHAR app_octetstreamW[]
static HRESULT WINAPI MimeFilterSink_ReportResult(IInternetProtocolSink *iface, HRESULT hrResult, DWORD dwError, LPCWSTR szResult)
static ULONG WINAPI MimeFilterSink_AddRef(IInternetProtocolSink *iface)
static HRESULT WINAPI MimeFilterSink_ReportProgress(IInternetProtocolSink *iface, ULONG ulStatusCode, LPCWSTR szStatusText)
HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
static BOOL application_postscript_filter(const BYTE *b, DWORD size)
static ULONG WINAPI MimeFilterProtocol_AddRef(IInternetProtocol *iface)
static ULONG WINAPI MimeFilterProtocol_Release(IInternetProtocol *iface)
#define memcpy(s1, s2, n)
const WCHAR * proposed_mime
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
interface IBindCtx * LPBC
#define IsEqualGUID(rguid1, rguid2)
IInternetProtocol IInternetProtocol_iface
IInternetProtocolSink IInternetProtocolSink_iface
#define CONTAINING_RECORD(address, type, field)
struct _LARGE_INTEGER::@2527 u
static void URLMON_LockModule(void)
static void URLMON_UnlockModule(void)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define HKEY_CLASSES_ROOT