summaryrefslogtreecommitdiffstats
path: root/lib/class
diff options
context:
space:
mode:
Diffstat (limited to 'lib/class')
-rw-r--r--lib/class/stream.class.php85
-rw-r--r--lib/class/update.class.php41
2 files changed, 118 insertions, 8 deletions
diff --git a/lib/class/stream.class.php b/lib/class/stream.class.php
index 6fca492c..fe40de79 100644
--- a/lib/class/stream.class.php
+++ b/lib/class/stream.class.php
@@ -45,13 +45,14 @@ class Stream {
$this->type = $type;
$this->songs = $song_ids;
$this->web_path = Config::get('web_path');
+ $this->user_id = $GLOBALS['user']->id;
if (Config::get('force_http_play')) {
$this->web_path = preg_replace("/https/", "http",$this->web_path);
}
- $this->sess = session_id();
- $this->user_id = $GLOBALS['user']->id;
+ // Generate the session ID
+ $this->session = md5(uniqid(rand(), true));;
} // Constructor
@@ -67,6 +68,12 @@ class Stream {
return false;
}
+ // We're starting insert the session into session_stream
+ if (!$this->insert_session()) {
+ debug_event('stream','Session Insertion failure, aboring','3');
+ return false;
+ }
+
$methods = get_class_methods('Stream');
$create_function = "create_" . $this->type;
@@ -94,6 +101,68 @@ class Stream {
} // manual_url_add
/**
+ * insert_session
+ * This inserts a row into the session_stream table
+ */
+ private function insert_session() {
+
+ $expire = time() + Config::get('stream_length');
+
+ $sql = "INSERT INTO `session_stream` (`id`,`expire`,`user`) " .
+ "VALUES('$this->session','$expire','$this->user_id')";
+ $db_results = Dba::query($sql);
+
+ if (!$db_results) { return false; }
+
+ return true;
+
+ } // insert_session
+
+ /**
+ * session_exists
+ * This checks to see if the passed stream session exists and is valid
+ */
+ public static function session_exists($sid) {
+
+ $sid = Dba::escape($sid);
+ $time = time();
+
+ $sql = "SELECT * FROM `session_stream` WHERE `id`='$sid' AND `expire` > '$time'";
+ $db_results = Dba::query($sql);
+
+ if ($row = Dba::fetch_assoc($db_results)) {
+ return true;
+ }
+
+ return false;
+
+ } // session_exists
+
+ /**
+ * extend_session
+ * This takes the passed sid and does a replace into also setting the user
+ * agent and IP also do a little GC in this function
+ */
+ public static function extend_session($sid,$uid) {
+
+ $expire = time() + Config::get('stream_length');
+ $sid = Dba::escape($sid);
+ $agent = Dba::escape($_SERVER['HTTP_USER_AGENT']);
+ $ip = ip2int($_SERVER['REMOTE_ADDR']);
+ $uid = Dba::escape($uid);
+
+ $sql = "UPDATE `session_stream` SET `expire`='$expire', `agent`='$agent', `ip`='$ip' " .
+ "WHERE `id`='$sid'";
+ $db_results = Dba::query($sql);
+
+ $sql = "DELETE FROM `session_stream` WHERE `ip`='$ip' AND `agent`='$agent' AND `user`='$uid' AND `id` != '$sid'";
+ $db_results = Dba::query($sql);
+
+ return true;
+
+ } // extend_session
+
+ /**
* create_simplem3u
* this creates a simple m3u without any of the extended information
*/
@@ -118,7 +187,7 @@ class Stream {
if ($GLOBALS['user']->prefs['play_type'] == 'downsample') {
$ds = $GLOBALS['user']->prefs['sample_rate'];
}
- echo "$this->web_path/play/index.php?song=$song_id&uid=$this->user_id&sid=$this->sess&ds=$ds&stupidwinamp=." . $song->type . "\n";
+ echo $song->get_url($this->session);
} // end foreach
/* Foreach the additional URLs */
@@ -155,7 +224,7 @@ class Stream {
$song->format();
echo "#EXTINF:$song->time," . $song->f_artist_full . " - " . $song->title . "\n";
- echo $song->get_url() . "\n";
+ echo $song->get_url($this->session) . "\n";
} // end foreach
/* Foreach URLS */
@@ -186,7 +255,7 @@ class Stream {
$song = new Song($song_id);
$song->format();
$song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
- $song_url = $song->get_url();
+ $song_url = $song->get_url($this->session);
echo "File" . $i . "=$song_url\n";
echo "Title" . $i . "=$song_name\n";
echo "Length" . $i . "=$song->time\n";
@@ -220,7 +289,7 @@ class Stream {
foreach ($this->songs as $song_id) {
$song = new Song($song_id);
$song->format();
- $url = $song->get_url();
+ $url = $song->get_url($this->session);
$song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
echo "<ENTRY>\n";
@@ -264,7 +333,7 @@ class Stream {
$song->format();
$xml = array();
- $xml['track']['location'] = $song->get_url() . $flash_hack;
+ $xml['track']['location'] = $song->get_url($this->session) . $flash_hack;
$xml['track']['identifier'] = $xml['track']['location'];
$xml['track']['title'] = $song->title;
$xml['track']['creator'] = $song->f_artist_full;
@@ -392,7 +461,7 @@ class Stream {
header("Content-Type: audio/x-pn-realaudio ram;");
foreach ($this->songs as $song_id) {
$song = new Song($song_id);
- echo "$this->web_path/play/index.php?song=$song_id&uid=$this->user_id&sid=$this->sess&stupidwinamp=." . $song->type . "\n";
+ echo $song->get_url($this->session);
} // foreach songs
} // create_ram
diff --git a/lib/class/update.class.php b/lib/class/update.class.php
index bd1be7af..2af04264 100644
--- a/lib/class/update.class.php
+++ b/lib/class/update.class.php
@@ -215,6 +215,11 @@ class Update {
$version[] = array('version' => '340006','description' => $update_string);
+ $update_string = '- Added new session_stream table for sessions tied directly to stream instances.<br />' .
+ '- Altered the session table, making value a LONGTEXT.<br />';
+
+ $version[] = array('version' => '340007','description' => $update_string);
+
return $version;
} // populate_version
@@ -807,5 +812,41 @@ class Update {
} // update_340006
+ /**
+ * update_340007
+ * This update converts the session.value to a longtext
+ * and adds a session_stream table
+ */
+ public static function update_340007() {
+
+ // Tweak the session table to handle larger session vars for my page-a-nation hotness
+ $sql = "ALTER TABLE `session` CHANGE `value` `value` LONGTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL";
+ $db_results = Dba::query($sql);
+
+ // Create the new stream table where we will store stream SIDs
+ $sql = "CREATE TABLE `session_stream` ( " .
+ "`id` VARCHAR( 64 ) NOT NULL , " .
+ "`user` INT( 11 ) UNSIGNED NOT NULL , " .
+ "`agent` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL , " .
+ "`expire` INT( 11 ) UNSIGNED NOT NULL , " .
+ "`ip` INT( 11 ) UNSIGNED NULL , " .
+ "PRIMARY KEY ( `id` ) " .
+ ") ENGINE = MYISAM";
+ $db_results = Dba::query($sql);
+
+ // Change the now playing to use stream session ids for its ID
+ $sql = "ALTER TABLE `now_playing` CHANGE `id` `id` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL";
+ $db_results = Dba::query($sql);
+
+ // Now longer needed because of the new hotness
+ $sql = "ALTER TABLE `now_playing` DROP `session`";
+ $db_results = Dba::query($sql);
+
+ self::set_version('db_version','340007');
+
+ return true;
+
+ } // update_340007
+
} // end update class
?>