*
  • sessid : string, session ID
  • *
  • id : string, global unique ID of requested file
  • * * * On success, returns HTTP return code 200 and requested file. * * On errors, returns HTTP return code >200 * The possible error codes are: * * */ require_once 'DB.php'; require_once '../conf.php'; require_once '../LocStor.php'; $dbc = DB::connect($config['dsn'], TRUE); $dbc->setErrorHandling(PEAR_ERROR_RETURN); $dbc->setFetchMode(DB_FETCHMODE_ASSOC); $locStor = &new LocStor($dbc, $config); function http_error($code, $err){ header("HTTP/1.1 $code"); header("Content-type: text/plain; charset=UTF-8"); echo "$err\r\n"; exit; } // parameter checking: if(preg_match("|^[0-9a-fA-F]{32}$|", $_REQUEST['sessid'])){ $sessid = $_REQUEST['sessid']; }else{ http_error(400, "Error on sessid parameter. ({$_REQUEST['sessid']})"); } if(preg_match("|^[0-9a-fA-F]{16}$|", $_REQUEST['id'])){ $gunid = $_REQUEST['id']; }else{ http_error(400, "Error on id parameter. ({$_REQUEST['id']})"); } // stored file recall: $ac =& StoredFile::recallByGunid($locStor, $gunid); if($dbc->isError($ac)){ switch($ac->getCode()){ case GBERR_DENY: http_error(403, "403 ".$ac->getMessage()); case GBERR_FILENEX: case GBERR_FOBJNEX: http_error(404, "404 File not found"); default: http_error(500, "500 ".$ac->getMessage()); } } $lid = $locStor->_idFromGunid($gunid); if($dbc->isError($lid)){ http_error(500, $lid->getMessage()); } if(($res = $locStor->_authorize('read', $lid, $sessid)) !== TRUE){ http_error(403, "403 Access denied"); } $ftype = $locStor->getObjType($lid); if($dbc->isError($ftype)){ http_error(500, $ftype->getMessage()); } switch($ftype){ case"audioclip": $realFname = $ac->_getRealRADFname(); $mime = $ac->rmd->getMime(); header("Content-type: $mime"); readfile($realFname); break; case"webstream": $url = $locStor->bsGetMetadataValue($lid, 'ls:url'); if(PEAR::isError($url)){ http_error(500, $url->getMessage()); } $url = $url[0]['value']; $txt = "Location: $url"; header($txt); // echo "$txt\n"; break; case"playlist"; // $md = $locStor->bsGetMetadata($ac->getId(), $sessid); $md = $locStor->getAudioClip($sessid, $gunid); // header("Content-type: text/xml"); header("Content-type: application/smil"); echo $md; break; default: // var_dump($ftype); http_error(500, "500 Unknown ftype ($ftype)"); } ?>