aboutsummaryrefslogtreecommitdiff
path: root/lib/win32/libmms_win32/src/input_mms.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/win32/libmms_win32/src/input_mms.c')
-rw-r--r--lib/win32/libmms_win32/src/input_mms.c451
1 files changed, 0 insertions, 451 deletions
diff --git a/lib/win32/libmms_win32/src/input_mms.c b/lib/win32/libmms_win32/src/input_mms.c
deleted file mode 100644
index fdfbbad8a2..0000000000
--- a/lib/win32/libmms_win32/src/input_mms.c
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * Copyright (C) 2002-2003 the xine project
- *
- * This file is part of xine, a free video player.
- *
- * xine is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * xine is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * $Id: input_mms.c,v 1.1 2004/02/15 19:57:21 mathrick Exp $
- *
- * mms input plugin based on work from major mms
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <unistd.h>
-#include <stdio.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define LOG_MODULE "input_mms"
-#define LOG_VERBOSE
-/*
-#define LOG
-*/
-
-#include "bswap.h"
-#include "xine_internal.h"
-#include "xineutils.h"
-#include "input_plugin.h"
-
-#include "mms.h"
-#include "mmsh.h"
-#include "net_buf_ctrl.h"
-
-#define PROTOCOL_UNDEFINED 0
-#define PROTOCOL_MMST 1
-#define PROTOCOL_MMSH 2
-
-#if !defined(NDELAY) && defined(O_NDELAY)
-#define FNDELAY O_NDELAY
-#endif
-
-/* network bandwidth */
-const uint32_t mms_bandwidths[]={14400,19200,28800,33600,34430,57600,
- 115200,262200,393216,524300,1544000,10485800};
-
-const char * mms_bandwidth_strs[]={"14.4 Kbps (Modem)", "19.2 Kbps (Modem)",
- "28.8 Kbps (Modem)", "33.6 Kbps (Modem)",
- "34.4 Kbps (Modem)", "57.6 Kbps (Modem)",
- "115.2 Kbps (ISDN)", "262.2 Kbps (Cable/DSL)",
- "393.2 Kbps (Cable/DSL)","524.3 Kbps (Cable/DSL)",
- "1.5 Mbps (T1)", "10.5 Mbps (LAN)", NULL};
-
-typedef struct {
- input_plugin_t input_plugin;
-
- xine_stream_t *stream;
- mms_t *mms;
- mmsh_t *mmsh;
-
- char *mrl;
-
- off_t curpos;
-
- nbc_t *nbc;
-
- char scratch[1025];
-
- int bandwidth;
- int protocol; /* mmst or mmsh */
-
-} mms_input_plugin_t;
-
-typedef struct {
-
- input_class_t input_class;
-
- mms_input_plugin_t *ip;
-
- xine_t *xine;
-} mms_input_class_t;
-
-static off_t mms_plugin_read (input_plugin_t *this_gen,
- char *buf, off_t len) {
- mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen;
- off_t n = 0;
-
- lprintf ("mms_plugin_read: %lld bytes ...\n", len);
-
- nbc_check_buffers (this->nbc);
-
- switch (this->protocol) {
- case PROTOCOL_MMST:
- n = mms_read (this->mms, buf, len);
- break;
- case PROTOCOL_MMSH:
- n = mmsh_read (this->mmsh, buf, len);
- break;
- }
-
- this->curpos += n;
-
- return n;
-}
-
-static buf_element_t *mms_plugin_read_block (input_plugin_t *this_gen,
- fifo_buffer_t *fifo, off_t todo) {
- /*mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen; */
- buf_element_t *buf = fifo->buffer_pool_alloc (fifo);
- int total_bytes;
-
- lprintf ("mms_plugin_read_block: %lld bytes...\n", todo);
-
- buf->content = buf->mem;
- buf->type = BUF_DEMUX_BLOCK;
-
- total_bytes = mms_plugin_read (this_gen, buf->content, todo);
-
- if (total_bytes != todo) {
- buf->free_buffer (buf);
- return NULL;
- }
-
- buf->size = total_bytes;
-
- return buf;
-}
-
-static off_t mms_plugin_seek (input_plugin_t *this_gen, off_t offset, int origin) {
- mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen;
- off_t dest = this->curpos;
-
- lprintf ("mms_plugin_seek: %lld offset, %d origin...\n", offset, origin);
-
- switch (origin) {
- case SEEK_SET:
- dest = offset;
- break;
- case SEEK_CUR:
- dest = this->curpos + offset;
- break;
- case SEEK_END:
- printf ("input_mms: SEEK_END not implemented!\n");
- return this->curpos;
- default:
- printf ("input_mms: unknown origin in seek!\n");
- return this->curpos;
- }
-
- if (this->curpos > dest) {
- printf ("input_mms: cannot seek back!\n");
- return this->curpos;
- }
-
- while (this->curpos<dest) {
- int n = 0;
- int diff;
-
- diff = dest - this->curpos;
-
- if (diff>1024)
- diff = 1024;
-
- switch (this->protocol) {
- case PROTOCOL_MMST:
- n = mms_read (this->mms, this->scratch, diff);
- break;
- case PROTOCOL_MMSH:
- n = mmsh_read (this->mmsh, this->scratch, diff);
- break;
- }
-
- this->curpos += n;
-
- if (n < diff)
- return this->curpos;
-
- }
-
- return this->curpos;
-}
-
-static off_t mms_plugin_get_length (input_plugin_t *this_gen) {
- mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen;
- off_t length = 0;
-
- if (!this->mms)
- return 0;
-
- switch (this->protocol) {
- case PROTOCOL_MMST:
- length = mms_get_length (this->mms);
- break;
- case PROTOCOL_MMSH:
- length = mmsh_get_length (this->mmsh);
- break;
- }
-
- lprintf ("length is %lld\n", length);
-
- return length;
-
-}
-
-static uint32_t mms_plugin_get_capabilities (input_plugin_t *this_gen) {
- return INPUT_CAP_PREVIEW;
-}
-
-static uint32_t mms_plugin_get_blocksize (input_plugin_t *this_gen) {
- return 0;
-}
-
-static off_t mms_plugin_get_current_pos (input_plugin_t *this_gen){
- mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen;
-
- /*
- printf ("current pos is %lld\n", this->curpos);
- */
-
- return this->curpos;
-}
-
-static void mms_plugin_dispose (input_plugin_t *this_gen) {
- mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen;
-
- if (this->mms)
- mms_close (this->mms);
-
- if (this->mmsh)
- mmsh_close (this->mmsh);
-
- this->mms = NULL;
- this->mmsh = NULL;
-
- if (this->nbc) {
- nbc_close (this->nbc);
- this->nbc = NULL;
- }
-
- if(this->mrl)
- free(this->mrl);
-
- free (this);
-}
-
-static char* mms_plugin_get_mrl (input_plugin_t *this_gen) {
- mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen;
-
- return this->mrl;
-}
-
-static int mms_plugin_get_optional_data (input_plugin_t *this_gen,
- void *data, int data_type) {
- mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen;
-
- switch (data_type) {
-
- case INPUT_OPTIONAL_DATA_PREVIEW:
- switch (this->protocol) {
- case PROTOCOL_MMST:
- return mms_peek_header (this->mms, data, MAX_PREVIEW_SIZE);
- break;
- case PROTOCOL_MMSH:
- return mmsh_peek_header (this->mmsh, data, MAX_PREVIEW_SIZE);
- break;
- }
- break;
-
- default:
- return INPUT_OPTIONAL_UNSUPPORTED;
- break;
-
- }
-
- return INPUT_OPTIONAL_UNSUPPORTED;
-}
-
-static void bandwidth_changed_cb (void *this_gen, xine_cfg_entry_t *entry) {
- mms_input_class_t *class = (mms_input_class_t*) this_gen;
-
- lprintf ("bandwidth_changed_cb %d\n", entry->num_value);
-
- if(!class)
- return;
-
- if(class->ip && ((entry->num_value >= 0) && (entry->num_value <= 11))) {
- mms_input_plugin_t *this = class->ip;
-
- this->bandwidth = mms_bandwidths[entry->num_value];
- }
-}
-
-static int mms_plugin_open (input_plugin_t *this_gen) {
- mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen;
- mms_t *mms = NULL;
- mmsh_t *mmsh = NULL;
-
- switch (this->protocol) {
- case PROTOCOL_UNDEFINED:
- mms = mms_connect (this->stream, this->mrl, this->bandwidth);
- if (mms) {
- this->protocol = PROTOCOL_MMST;
- } else {
- mmsh = mmsh_connect (this->stream, this->mrl, this->bandwidth);
- this->protocol = PROTOCOL_MMSH;
- }
- break;
- case PROTOCOL_MMST:
- mms = mms_connect (this->stream, this->mrl, this->bandwidth);
- break;
- case PROTOCOL_MMSH:
- mmsh = mmsh_connect (this->stream, this->mrl, this->bandwidth);
- break;
- }
-
- if (!mms && !mmsh) {
- return 0;
- }
-
- this->mms = mms;
- this->mmsh = mmsh;
- this->curpos = 0;
-
- return 1;
-}
-
-static input_plugin_t *mms_class_get_instance (input_class_t *cls_gen, xine_stream_t *stream,
- const char *data) {
-
- mms_input_class_t *cls = (mms_input_class_t *) cls_gen;
- mms_input_plugin_t *this;
- char *mrl = strdup(data);
- xine_cfg_entry_t bandwidth_entry;
- int protocol;
-
- lprintf ("trying to open '%s'\n", mrl);
-
- if (!strncasecmp (mrl, "mms://", 6)) {
- protocol = PROTOCOL_UNDEFINED;
- } else if (!strncasecmp (mrl, "mmst://", 7)) {
- protocol = PROTOCOL_MMST;
- } else if (!strncasecmp (mrl, "mmsh://", 7)) {
- protocol = PROTOCOL_MMSH;
- } else {
- free (mrl);
- return NULL;
- }
-
- this = (mms_input_plugin_t *) xine_xmalloc (sizeof (mms_input_plugin_t));
- cls->ip = this;
- this->stream = stream;
- this->mms = NULL;
- this->mmsh = NULL;
- this->protocol = protocol;
- this->mrl = mrl;
- this->curpos = 0;
- this->nbc = nbc_init (this->stream);
-
- if (xine_config_lookup_entry (stream->xine, "input.mms_network_bandwidth",
- &bandwidth_entry)) {
- bandwidth_changed_cb(cls, &bandwidth_entry);
- }
-
- this->input_plugin.open = mms_plugin_open;
- this->input_plugin.get_capabilities = mms_plugin_get_capabilities;
- this->input_plugin.read = mms_plugin_read;
- this->input_plugin.read_block = mms_plugin_read_block;
- this->input_plugin.seek = mms_plugin_seek;
- this->input_plugin.get_current_pos = mms_plugin_get_current_pos;
- this->input_plugin.get_length = mms_plugin_get_length;
- this->input_plugin.get_blocksize = mms_plugin_get_blocksize;
- this->input_plugin.get_mrl = mms_plugin_get_mrl;
- this->input_plugin.dispose = mms_plugin_dispose;
- this->input_plugin.get_optional_data = mms_plugin_get_optional_data;
- this->input_plugin.input_class = cls_gen;
-
-
- return &this->input_plugin;
-}
-
-/*
- * mms input plugin class stuff
- */
-
-static char *mms_class_get_description (input_class_t *this_gen) {
- return _("mms streaming input plugin");
-}
-
-static char *mms_class_get_identifier (input_class_t *this_gen) {
- return "mms";
-}
-
-static void mms_class_dispose (input_class_t *this_gen) {
- mms_input_class_t *this = (mms_input_class_t *) this_gen;
-
- free (this);
-}
-
-static void *init_class (xine_t *xine, void *data) {
-
- mms_input_class_t *this;
-
- this = (mms_input_class_t *) xine_xmalloc (sizeof (mms_input_class_t));
-
- this->xine = xine;
- this->ip = NULL;
-
- this->input_class.get_instance = mms_class_get_instance;
- this->input_class.get_identifier = mms_class_get_identifier;
- this->input_class.get_description = mms_class_get_description;
- this->input_class.get_dir = NULL;
- this->input_class.get_autoplay_list = NULL;
- this->input_class.dispose = mms_class_dispose;
- this->input_class.eject_media = NULL;
-
- xine->config->register_enum(xine->config, "input.mms_network_bandwidth", 10,
- (char **)mms_bandwidth_strs,
- "Network bandwidth",
- NULL, 0, bandwidth_changed_cb, (void*) this);
-
- return this;
-}
-
-/*
- * exported plugin catalog entry
- */
-
-plugin_info_t xine_plugin_info[] = {
- /* type, API, "name", version, special_info, init_function */
- { PLUGIN_INPUT, 14, "mms", XINE_VERSION_CODE, NULL, init_class },
- { PLUGIN_NONE, 0, "", 0, NULL, NULL }
-};