javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/HttpDataSource.java
branchRCL_3
changeset 24 0fd27995241b
child 72 1f0034e370aa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/HttpDataSource.java	Tue May 11 16:07:20 2010 +0300
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This class is an imlementation of DataSource
+*
+*/
+
+
+package com.nokia.microedition.media;
+
+import javax.microedition.media.MediaException;
+import java.io.IOException;
+import javax.microedition.io.Connection;
+import javax.microedition.io.HttpConnection;
+import javax.microedition.media.Control;
+
+/**
+ * This class extends ConnectorDataSource and adds http connection
+ * return value checking.
+ */
+public class HttpDataSource extends ConnectorDataSource implements SeekControl
+{
+    private static final String SEEK_CONTROL = "SeekControl";
+
+    // true when closed
+    boolean iClosed = false;
+
+    /**
+     * Default constructor
+     */
+    public HttpDataSource(Locator aLocator)
+    throws IOException, MediaException
+    {
+        super(aLocator);
+    }
+
+    /**
+     * From ConnectorDataSource
+     * @see ConnectorDataSource
+     */
+    protected void checkConnection(Connection aConnection) throws IOException
+    {
+        // Must handle also HTTP response codes
+        HttpConnection httpConnection = (HttpConnection)aConnection;
+        if (httpConnection.getResponseCode() != HttpConnection.HTTP_OK)
+        {
+            throw new IOException(
+                "Could not connect to source, " + httpConnection.getResponseMessage());
+        }
+    }
+
+    /**
+     * From SeekControl
+     */
+    public void seek(int aWhere) throws IOException
+    {
+        // Only seek to start is supported.
+        if (aWhere == 0)
+        {
+            disconnect();
+
+            // do not connect if stream is closed
+            if (!iClosed)
+            {
+                connect();
+            }
+
+            if (iClosed)
+            {
+                // disconnect if stream was closed during connect operation
+                disconnect();
+            }
+        }
+        else
+        {
+            throw new IOException("Internal error, invalid position: " + aWhere);
+        }
+    }
+
+    /**
+     * From SeekControl
+     */
+    public void close()
+    {
+        iClosed = true;
+    }
+
+    /**
+     * From Controllable
+     */
+    public Control getControl(String aControlType)
+    {
+        Control control = null;
+        if (aControlType.equals(SEEK_CONTROL))
+        {
+            control = this;
+        }
+        // else return null
+        return control;
+    }
+}
+// End of File
+