190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* 2f71323e297a928af368937089d3ed71239786f86Andreas Huber * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 4f71323e297a928af368937089d3ed71239786f86Andreas Huber * Use of this source code is governed by a BSD-style license 5f71323e297a928af368937089d3ed71239786f86Andreas Huber * that can be found in the LICENSE file in the root of the source 6f71323e297a928af368937089d3ed71239786f86Andreas Huber * tree. An additional intellectual property rights grant can be found 7f71323e297a928af368937089d3ed71239786f86Andreas Huber * in the file PATENTS. All contributing project authors may 8f71323e297a928af368937089d3ed71239786f86Andreas Huber * be found in the AUTHORS file in the root of the source tree. 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef _duck_io_h 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define _duck_io_h 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if defined(__cplusplus) 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern "C" { 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if defined (_WIN32) 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber typedef __int64 int64_t; 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#elif defined(__MWERKS__) 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber typedef long long int64_t; 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#elif defined(__APPLE__) || defined(__POWERPC) 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include <ppc/types.h> 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber typedef long long int64_t; 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber typedef struct 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int64_t offset; // offset to start from 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int blocking; // non-zero for blocking 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } re_open_t; 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber typedef enum 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_MAX = -10, 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERROR = -11, // Default error 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_WSASTARTUP = -12, 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_SOCKET_CREATE = -13, 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_RESOLVING_HOSTNAME = -14, 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_SERVER_CONNECTION = -15, 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_SENDING_DATA = -16, 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_RECEIVING_DATA = -17, 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_404_FILE_NOT_FOUND = -18, 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_PARSING_HTTP_HEADER = -19, 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_PARSING_CONTENT_LEN = -20, 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_CONNECTION_TIMEOUT = -21, 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_FILE_OPEN_FAILED = -22, 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR_MIN = -23 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } SAL_ERR; /* EMH 1-15-03 */ 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber typedef struct sal_err_map_temp 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAL_ERR code; 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber const char *decode; 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } sal_err_map_t; 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber static char *sal_err_text(SAL_ERR e) 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int t; 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber const sal_err_map_t g_sal_err_map[] = 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_WSASTARTUP, "Error with WSAStartup" }, 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_SOCKET_CREATE, "Error creating socket" }, 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_RESOLVING_HOSTNAME, "Error resolving hostname" }, 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_SERVER_CONNECTION, "Error connecting to server" }, 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_SENDING_DATA, "Error sending data" }, 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_RECEIVING_DATA, "Error receiving data" }, 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_404_FILE_NOT_FOUND, "Error file not found " }, 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_PARSING_HTTP_HEADER, "Error parsing http header" }, 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_PARSING_CONTENT_LEN, "Error parsing content length" }, 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_CONNECTION_TIMEOUT, "Error Connection timed out" }, 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { SAL_ERR_FILE_OPEN_FAILED, "Error opening file" } 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber }; 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber for (t = 0; t < sizeof(g_sal_err_map) / sizeof(sal_err_map_t); t++) 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber { 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if (e == g_sal_err_map[t].code) 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return (char *) g_sal_err_map[t].decode; 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber return 0; 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int duck_open(const char *fname, unsigned long user_data); 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void duck_close(int ghndl); 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int duck_read(int ghndl, unsigned char *buf, int nbytes); 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int64_t duck_seek(int g_hndl, int64_t offs, int origin); 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int duck_read_finished(int han, int flag); /* FWG 7-9-99 */ 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int duck_name(int handle, char name[], size_t max_len); /* EMH 9-23-03 */ 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int duck_read_blocking(int handle, unsigned char *buffer, int bytes); /* EMH 9-23-03 */ 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int64_t duck_available_data(int handle); /* EMH 10-23-03 */ 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if defined(__cplusplus) 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 117