ExtendScript filesystem access breaks mysteriously
Hi,
I am experiencing mysterious issue with ExtendScript filesystem access. I have two ExtendScript functions which I am calling from my Illustrator html5 panel:
function p1_open(path) {
app.open(new File(path));
function p1_openAsLayer(name, path) {
var result = '';
var doc = app.activeDocument;
var layer = doc.layers.add();
layer.name = name;
var placedItem = layer.placedItems.add();
try {
placedItem.file = new File(path);
placedItem.embed();
} catch (e) {
layer.remove();
result = e;
return result;
The first one works every time. The second one seems to "break" randomly - the result I get back when calling that function using CSInterface.evalScript is "ExtendScript error", and then it stays broken until I restart my computer (OS X Maverics, and I got report about it happening on other OS X computers).
This happens on all apps I am testing: Illustrator CC, Illustrator CC 2014, Photoshop CC and Phoshop CC 2014 (the Photoshop version has its own openAsLayer function, but it fails as well). When it gets to "broken" state, it is broken globally for all applications, including when I run scripts directly from ExtendScript Toolkit without being in any application scope.
It happens seemingly randomly, sometimes it works for days, sometimes it breaks soon after computer restart. I can easily detect when the app is in this "broken" state by trying to create File or Folder object for something which I am sure it exists - the "exists" property will be false. For example, when running this from ExtendScript Toolkit:
var f = new Folder("/Users/jan/Application Support/Adobe/CEP/extensions/ob-devel"); // the extension dir, it exists for sure
f.exists; // -> false
var f = new Folder("/Users/jan"); // my home folder, that one definitely exists :)
f.exists; // -> false
var f = new Folder("/Users"); // interestingly, this one stays correct, same for "/"
f.exists; // -> true
Any idea what might be causing this really mysterious issue? Or what could I do to track it down?
If you want to look at the extension causing the problems its here: https://www.dropbox.com/s/ugwm5lnrtdyqqms/openbrand-0.0.59-cc2014.zxp
This is random, but probably worth trying...putting the function inside of an object?
$.p1 = {
_openAsLayer : function (name, path) {
var result = '';
var doc = app.activeDocument;
var layer = doc.layers.add();
layer.name = name;
var placedItem = layer.placedItems.add();
try {
placedItem.file = new File(path);
placedItem.embed();
} catch (e) {
layer.remove();
result = e;
return result;
Similar Messages
-
Filesystem access with signed applet?
Is signing an applet enough to read-access the client filesystem?
I found webpages that said, signing the applet is sufficient while other webpages say you still need policy-files.Hello, there is more suitable solution for webpage application then is JFileUpload. Here, watch this video on youtube: http://www.youtube.com/watch?v=wqpwyAAhKGg . Java Applet is hidden controlled by JavaScript!
-
Ask user filesystem access permission only when necessary
Hello
Sorry I can't find an explicit title.
I try to remove my applet signature to avoid the startup security dialog which is not user-friendly.
But my applet offers the possiblity to save something on the user file system that can't be done without signed applet.
Is there a way to ask the file system access permission just when it is mandatory, like the PrintUtilities.print() does?
Thanks you in advanceHi ,
Thanks for you reply.
I will try this out and will let you know the results.
Are you talking about "setting default home page" for the user ,in your last line of reply ?
I think , this is the case when user clicks on Home link then this default page will be rendered. Am i right ?
Is there any docs which can tell all about the Access Privileges and also tells about how to play with Role Based Security in Oracle Portal Server ?
Thanks Again
<Neeraj Sidhaye/>
Try_Catch_Finally AT YAHOO DOT COM
http://ExtremePortal.blog.co.uk -
It seems strange to me but it appears the only systems you can't access iFS is unix filesystems.
Its seems strange to me that I can't access an iFS database from a unix machine.... Is this the case? BTW> I need filesystem access, not ftp/web/etc.
Thanks.<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Alan (Oracle):
IFS does not currently support NFS (which is the native Unix file system protocol).
This is an important future direction for us.<HR></BLOCKQUOTE>
Any idea which release this will be in?
null -
HOW TO Developing an Authorization plug-in
#if defined (_WIN32)
#pragma warning(disable : 4996)
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpReserved ) // reserved
return TRUE;
#endif
How to create here
/*----------------------------------------------------------------------------+
| ___ _ _ |
| / | | | | | |
| / /| | __| | ___ | |__ ___ |
| / /_| |/ _ |/ _ \| _ \ / _ \ |
| / ___ | (_| | (_) | |_) | __/ |
| /_/ |_|\__,_|\___/|____/ \___| |
| |
| |
| ADOBE CONFIDENTIAL |
| __________________ |
| |
| Copyright (c) 2003 - 2010, Adobe Systems Incorporated. |
| All rights reserved. |
| |
| NOTICE: All information contained herein is, and remains the property |
| of Adobe Systems Incorporated and its suppliers, if any. The intellectual |
| and technical concepts contained herein are proprietary to Adobe Systems |
| Incorporated and its suppliers and may be covered by U.S. and Foreign |
| Patents, patents in process, and are protected by trade secret or |
| copyright law. Dissemination of this information or reproduction of this |
| material is strictly forbidden unless prior written permission is |
| obtained from Adobe Systems Incorporated. |
| |
| Adobe Systems Incorporated 415.832.2000 |
| 601 Townsend Street 415.832.2020 fax |
| San Francisco, CA 94103 |
| |
+----------------------------------------------------------------------------*/
#include "StdAfx.h"
#include "FmsAuthAdaptor.h"
#include "FmsAuthActions.h"
#include "FmsMedia.h"
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include "hash.h"
#include <sstream>
#if defined (_WIN32)
#pragma warning(disable : 4996)
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpReserved ) // reserved
return TRUE;
#endif
// Flag to process SWF Verification in this auth sample. A real SWF file
// must be targeted in the SWFVerification code below for the example to work.
static const bool kAuthorizeSwfVerification = false;
class FmsAuthAdaptor : public IFmsAuthAdaptor
public:
FmsAuthAdaptor(IFmsAuthServerContext2* pFmsAuthServerContext)
: m_pFmsAuthServerContext(pFmsAuthServerContext) {}
virtual ~FmsAuthAdaptor() {}
void authorize(IFmsAuthEvent* pAev);
void notify(IFmsAuthEvent* pAev);
void getEvents(I32 aevBitAuth[], I32 aevBitNotf[], unsigned int count);
private:
bool getStats(I64 clientStatsHandle, FmsClientStats& baseStats);
void processStats(IFmsAuthEvent* pAev);
IFmsAuthServerContext2* m_pFmsAuthServerContext;
// Utils
// Note: Do not delete the return value. The return value is a buffer
// allocated in FMS memory space, and FMS will manage the memory.
static char* getStringField(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop)
FmsVariant field;
if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kString)
return reinterpret_cast<char*>(field.str);
return 0;
// Note: Do not delete the return value. The return value is a buffer
// allocated in FMS memory space, and FMS will manage the memory.
static U8* getBufferField(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop)
FmsVariant field;
if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kBuffer)
return field.buf;
return 0;
static bool getI8Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I8& iValue)
FmsVariant field;
if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kI8)
iValue = field.i8;
return true;
return false;
static bool getI32Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I32& iValue)
FmsVariant field;
if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kI32)
iValue = field.i32;
return true;
return false;
static bool getI64Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I64& iValue)
FmsVariant field;
if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kI64)
iValue = field.i64;
return true;
return false;
static bool getFloatField(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, float& fValue)
FmsVariant field;
if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kFloat)
fValue = field.f;
return true;
return false;
static bool getU16Field(const IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, U16& iValue)
FmsVariant field;
if (pEv->getField(prop, field) == IFmsAuthEvent::S_SUCCESS && field.type == field.kU16)
iValue = field.u16;
return true;
return false;
static bool setStringField(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, char* pValue)
FmsVariant field;
field.setString(reinterpret_cast<I8*>(pValue));
return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
static bool setI8Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I8 iValue)
FmsVariant field;
field.setI8(iValue);
return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
static bool setU8Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, U8 iValue)
FmsVariant field;
field.setU8(iValue);
return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
static bool setI32Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I32 iValue)
FmsVariant field;
field.setI32(iValue);
return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
static bool setI64Field(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, I64 iValue)
FmsVariant field;
field.setI64(iValue);
return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
static bool setFloatField(IFmsAuthEvent* pEv, IFmsAuthEvent::Field prop, float fValue)
FmsVariant field;
field.setFloat(fValue);
return pEv->setField(prop, field) == IFmsAuthEvent::S_SUCCESS;
static bool isADPCMSupported(int iAudioCodecs)
return (iAudioCodecs & SUPPORT_SND_ADPCM) != 0;
static bool isVP6Supported(int iVideoCodecs)
int iAllVP6 = ( SUPPORT_VID_VP6ALPHA | SUPPORT_VID_VP6 );
return (iVideoCodecs & iAllVP6) != 0;
static bool isService(int iType)
return (iType & TYPE_SERVICE) != 0;
static bool isAMF3(unsigned char uEncod)
return (uEncod == ENCODE_AMF3);
// This class will process all authorization events
class MyFmsAuthorizeEvent
public:
MyFmsAuthorizeEvent(IFmsAuthEvent* pAev, IFmsAuthServerContext2* pFmsAuthServerContext)
: m_pAev(pAev), m_pFmsAuthServerContext(pFmsAuthServerContext) {}
virtual ~MyFmsAuthorizeEvent() {}
void authorize();
private:
IFmsAuthEvent* m_pAev;
IFmsAuthServerContext2* m_pFmsAuthServerContext;
void MyFmsAuthorizeEvent::authorize()
bool bAuthorized = true; // default authorization state
switch(m_pAev->getType())
case IFmsAuthEvent::E_CONNECT:
// only E_CONNECT allows changes to the following fields:
// F_CLIENT_AUDIO_SAMPLE_ACCESS
// F_CLIENT_AUDIO_SAMPLE_ACCESS_LOCK
// F_CLIENT_READ_ACCESS
// F_CLIENT_READ_ACCESS_LOCK
// F_CLIENT_VIDEO_SAMPLE_ACCESS
// F_CLIENT_VIDEO_SAMPLE_ACCESS_LOCK
// F_CLIENT_WRITE_ACCESS_LOCK
// F_CLIENT_WRITE_ACCESS
I8 iValue;
if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS, iValue))
setI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS, iValue);
// redirect connection example
char* pUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
if (pUri && !strcmp(pUri, "rtmp://localhost/streamtest"))
setStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI,
"rtmp://localhost:1935/streamtest");
bAuthorized = false;
// set DiffServ fields based on a client IP
// char* pIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
// if (pIp && !strcmp(pIp, "192.168.1.1"))
// set the DSCP bits and mask
U8 m_diffServBits = 170;
U8 m_diffServMask = 252;
setU8Field(m_pAev, IFmsAuthEvent::F_CLIENT_DIFFSERV_BITS, m_diffServBits);
setU8Field(m_pAev, IFmsAuthEvent::F_CLIENT_DIFFSERV_MASK, m_diffServMask);
bAuthorized = true;
break;
case IFmsAuthEvent::E_PLAY:
char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
if (pStreamName)
setStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME, pStreamName);
char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
if (pStreamType)
setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType);
char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
if (pStreamQuery)
setStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY, pStreamQuery);
I8 iValue;
if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_RESET, iValue))
// If iValue is 1 (true) the playlist will be reset and the
// stream will be the only stream in the playlist; otherwise
// 0 (false) means the stream will be added to the existing
// playlist.
setI8Field(m_pAev, IFmsAuthEvent::F_STREAM_RESET, iValue);
if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_IGNORE, iValue))
// If iValue is 1 (true) the stream timestamps will be ignored;
// otherwise 0 (false) means the timestamps will be handled.
setI8Field(m_pAev, IFmsAuthEvent::F_STREAM_IGNORE, iValue);
char* pStreamTransition = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TRANSITION);
if (pStreamTransition && strlen(pStreamTransition))
// MBR transition example
if (!strcmp(pStreamTransition, "switch") ||
!strcmp(pStreamTransition, "swap"))
// get the old stream's properties
char* pOldStreamName = getStringField(m_pAev, IFmsAuthEvent::F_OLD_STREAM_NAME);
char* pOldStreamType = getStringField(m_pAev, IFmsAuthEvent::F_OLD_STREAM_TYPE);
char* pOldStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_OLD_STREAM_QUERY);
// if pOldStream is empty (optional for switch) current stream is in play
// do we really want stream transition?
// no we do not allow transition
// bAuthorized = false;
// now transition will be turned off and old stream continue playing
// break;
// doing nothing will execute transition mode as is
// or you could modify transition by changing transition properties
// set it to 1 to indicate they will be hooking up the stream,
// but that it does not currently exist
setI32Field(m_pAev, IFmsAuthEvent::F_STREAM_LIVE_PUBLISH_PENDING, 1);
// get the offset value if transition is set to offset mode for reconnect
if (!strcmp(pStreamTransition, "resume"))
float fValue;
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_OFFSET, fValue))
float offset = fValue; //offset value in seconds
else
// This is a regular play waiting for approval, which may be converted
// into a play2 command by changing transition properties
break;
case IFmsAuthEvent::E_PUBLISH:
char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
if (pStreamName)
setStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME, pStreamName);
char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
if (pStreamType)
setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType);
I32 iValue;
if (getI32Field(m_pAev, IFmsAuthEvent::F_STREAM_PUBLISH_TYPE, iValue))
// publish types:
// 0 : record
// 1 : append
// 2 : appendWithGap
// -1 : live
setI32Field(m_pAev, IFmsAuthEvent::F_STREAM_PUBLISH_TYPE, iValue);
break;
case IFmsAuthEvent::E_FILENAME_TRANSFORM:
I64 iValue;
if (getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_ID, iValue))
// some fields are not eligible to be modified. The return
// value will be false when trying to modify the F_CLIENT_ID.
bool bSet = setI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_ID, iValue);
char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
if (pStreamName)
// some fields are not eligible to be modified. The return
// value will be false when trying to modify the F_STREAM_NAME.
bool bSet = setStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME, pStreamName);
char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
if (pStreamPath)
setStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH, pStreamPath);
char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
if (pStreamType)
setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType);
break;
case IFmsAuthEvent::E_PAUSE:
bAuthorized = false; // block all E_PAUSE events.
float fValue;
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_PAUSE_TIME, fValue))
float fPauseTime = fValue; // in seconds
I8 iValue;
if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_PAUSE, iValue))
// 1 (true) means PAUSE
// 0 (false) means UNPAUSE
bool boolPause = iValue != 0;
if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_PAUSE_TOGGLE, iValue))
// 1 (true) means PAUSE_TOGGLE
// 0 (false) means no PAUSE_TOGGLE was set
bool boolPauseToggle = iValue != 0;
FmsVariant field;
// Notify Action example: An IFmsNofifyAction is created to notify
// server side action script (SSAS) of the E_PAUSE event by calling
// the function name "method" in the script. In this example two
// variables will be passed to "method" by calling addParam(field)
// on the action.
if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
I64 clientId = field.i64;
IFmsNotifyAction* pAction = m_pAev->addNotifyAction("Notified by adaptor");
pAction->setClientId(field);
const char mtd[] = "method";
field.setString(reinterpret_cast<I8*>(const_cast<char*>(mtd)));
pAction->setMethodName(field);
// create and insert a U16 "12345" as the first parameter
field.setU16(12345);
pAction->addParam(field);
// create and insert clientId as a double as the second parameter
field.setDouble((double)clientId);
pAction->addParam(field);
// Note: SSAS does not work with I64 or Buffer variants
// field.setI64(clientId);
// pAction->addParam(field); // incorrect
break;
case IFmsAuthEvent::E_SEEK:
bAuthorized = false; // block all E_SEEK events
float fValue;
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_SEEK_POSITION, fValue))
// Modification of the seek position example:
// fValue + 3; will add 3 seconds to the initial seek posistion
float fSeekTime = fValue; // value in seconds
setFloatField(m_pAev, IFmsAuthEvent::F_STREAM_SEEK_POSITION, fSeekTime);
break;
case IFmsAuthEvent::E_LOADSEGMENT:
// bAuthorized = false; // block all E_LOADSEGMENT events
// E_LOADSEGMENT is a read only event that substitutes E_PLAY on
// FMS Origin servers for recorded streams.
I64 iValue;
if (getI64Field(m_pAev, IFmsAuthEvent::F_SEGMENT_START, iValue))
I64 iStart = iValue; // in bytes
if (getI64Field(m_pAev, IFmsAuthEvent::F_SEGMENT_END, iValue))
I64 iEnd = iValue; // in bytes
break;
case IFmsAuthEvent::E_RECORD:
// bAuthorized = false; // block all E_RECORD events
float fValue;
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXSIZE, fValue))
float recMaxSize = fValue; // in kilobytes
setFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXSIZE, recMaxSize);
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXDURATION, fValue))
float recMaxDuration = fValue; // in seconds
setFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXDURATION, recMaxDuration);
break;
case IFmsAuthEvent::E_SWF_VERIFY:
// SWF Verification example:
// kAuthorizeSwfVerification is assigned false by default. The
// target SWF file must be updated for this to work.
if(kAuthorizeSwfVerification)
I8 swfvVersion = 0;
if(getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_VERSION, swfvVersion))
std::stringstream stream;
stream << "Swf verification version is " << static_cast<int>(swfvVersion);
m_pFmsAuthServerContext->log(stream.str().c_str(), IFmsServerContext::kInformation, false);
I64 swfvDepth;
if(getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_DEPTH, swfvDepth))
I32 swfvTTL;
if(getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_TTL, swfvTTL))
swfvTTL /= 2;
setI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_TTL, swfvTTL);
U8 digest[kSHA256DigestLen];
// Target a real SWF file instead of sample.swf
hashSwfFileAtDepth("C:\\sample.swf", swfvDepth, digest);
FmsVariant field;
field.setBuffer(digest, kSHA256DigestLen);
m_pAev->setField(IFmsAuthEvent::F_CLIENT_SWFV_DIGEST, field);
break;
case IFmsAuthEvent::E_APPSTART:
case IFmsAuthEvent::E_APPSTOP:
case IFmsAuthEvent::E_DISCONNECT:
case IFmsAuthEvent::E_STOP:
case IFmsAuthEvent::E_UNPUBLISH:
case IFmsAuthEvent::E_ACTION:
case IFmsAuthEvent::E_CODEC_CHANGE:
case IFmsAuthEvent::E_RECORD_STOP:
case IFmsAuthEvent::E_CLIENT_PAUSE:
case IFmsAuthEvent::E_SWF_VERIFY_COMPLETE:
case IFmsAuthEvent::E_CLIENT_SEEK:
case IFmsAuthEvent::E_START_TRANSMIT:
case IFmsAuthEvent::E_STOP_TRANSMIT:
case IFmsAuthEvent::E_MAXEVENT:
break;
IFmsAuthServerContext2::AuthFailureDesc* desc = NULL;
if(!bAuthorized)
desc = new IFmsAuthServerContext2::AuthFailureDesc("Blocked by auth adaptor",
IFmsAuthServerContext2::kDefaultStatus, -1);
char buf[1024];
const char* const action = bAuthorized ? "approved" : "rejected";
sprintf(buf, "Received authorization type=%d id=%p %s\n", m_pAev->getType(),
m_pAev, action);
// log to the configured FMS log directory. If the third parameter is true,
// also send the log to the system event log.
m_pFmsAuthServerContext->log(buf, IFmsServerContext::kInformation, false);
m_pFmsAuthServerContext->onAuthorize(m_pAev, bAuthorized, desc);
delete desc;
class MyFmsNotifyEvent
public:
MyFmsNotifyEvent(IFmsAuthEvent* pAev, IFmsAuthServerContext2* pFmsAuthServerContext)
: m_pAev(pAev), m_pFmsAuthServerContext(pFmsAuthServerContext) {}
virtual ~MyFmsNotifyEvent() {}
void notify() const;
private:
IFmsAuthEvent* m_pAev;
IFmsAuthServerContext2* m_pFmsAuthServerContext;
void MyFmsNotifyEvent::notify() const
switch(m_pAev->getType())
case IFmsAuthEvent::E_PLAY:
char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
char* pAppInst = getStringField(m_pAev, IFmsAuthEvent::F_APP_INST);
char* pAppUri = getStringField(m_pAev, IFmsAuthEvent::F_APP_URI);
char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
char* pClUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
char* pClNewUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI);
char* pClVhost = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VHOST);
char* pClRef = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REFERRER);
char* pClPurl = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PAGE_URL);
char* pClAgent = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_USER_AGENT);
char* pClRAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS);
char* pClWAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS);
char* pClAudioAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS);
char* pClVideoAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS);
char* pClProto = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PROTO);
char* pClUstem = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI_STEM);
char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
I32 iValue;
if (getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_CODECS, iValue))
bool bADPCM = isADPCMSupported(iValue);
if (getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_CODECS, iValue))
bool bVP6 = isVP6Supported(iValue);
if (getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_TYPE, iValue))
bool bService = isService(iValue);
if (getI32Field(m_pAev, IFmsAuthEvent::F_STREAM_ID, iValue))
I32 iStreamId = iValue;
float fValue;
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_LENGTH, fValue))
float fLength = fValue; // in seconds
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_POSITION, fValue))
float iPosition = fValue; // in seconds
I64 lValue;
if (getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_ID, lValue))
I64 iClientId = lValue;
I8 sValue;
if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_SECURE, sValue))
bool bSecure = sValue != 0;
if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_AMF_ENCODING, sValue))
bool bAMF3 = isAMF3(sValue);
if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS_LOCK, sValue))
bool bRead = sValue != 0;
if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS_LOCK, sValue))
bool bWrite = sValue != 0;
if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS_LOCK, sValue))
bool bAudioRead = sValue != 0;
if (getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS_LOCK, sValue))
bool bVideoRead = sValue != 0;
if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_RESET, sValue))
bool bReset = sValue != 0;
if (getI8Field(m_pAev, IFmsAuthEvent::F_STREAM_IGNORE, sValue))
bool bIgnore = sValue != 0;
break;
case IFmsAuthEvent::E_SEEK:
float fValue;
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_SEEK_POSITION, fValue))
float fSeekTime = fValue;
// Disconnect Action example: disconnect the client that was
// specified by the E_SEEK notify event
FmsVariant field;
if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
IFmsDisconnectAction* pAction =
const_cast<IFmsAuthEvent*>(m_pAev)->
addDisconnectAction("Seek is not allowed. Blocked by adaptor");
pAction->setClientId(field);
break;
case IFmsAuthEvent::E_CODEC_CHANGE:
char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
char* pAppInst = getStringField(m_pAev, IFmsAuthEvent::F_APP_INST);
char* pAppUri = getStringField(m_pAev, IFmsAuthEvent::F_APP_URI);
char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
char* pClUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
char* pClNewUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI);
char* pClVhost = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VHOST);
char* pClRef = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REFERRER);
char* pClPurl = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PAGE_URL);
char* pClAgent = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_USER_AGENT);
char* pClRAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS);
char* pClWAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS);
char* pClAudioAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS);
char* pClVideoAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS);
char* pClProto = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PROTO);
char* pClUstem = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI_STEM);
char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
U16 fType;
if (getU16Field(m_pAev, IFmsAuthEvent::F_STREAM_CODEC_TYPE, fType))
U16 streamCodecType = fType;
if (streamCodecType == kVIDEO_CODEC)
U16 fValue;
if (getU16Field(m_pAev, IFmsAuthEvent::F_STREAM_CODEC, fValue))
U16 streamCodecValue = fValue;
if (streamCodecValue == VIDEO_CODEC_SORENSON)
// Disconnect Action example: Disallow clients trying
// to publish content with the sorenson video codec.
FmsVariant field;
if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
IFmsDisconnectAction* pAction =
const_cast<IFmsAuthEvent*>(m_pAev)->
addDisconnectAction("Sorenson is not allowed. Blocked by adaptor");
pAction->setClientId(field);
break;
case IFmsAuthEvent::E_RECORD_STOP:
char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
char* pAppInst = getStringField(m_pAev, IFmsAuthEvent::F_APP_INST);
char* pAppUri = getStringField(m_pAev, IFmsAuthEvent::F_APP_URI);
char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
char* pClUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI);
char* pClNewUri = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REDIRECT_URI);
char* pClVhost = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VHOST);
char* pClRef = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_REFERRER);
char* pClPurl = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PAGE_URL);
char* pClAgent = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_USER_AGENT);
char* pClRAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_READ_ACCESS);
char* pClWAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_WRITE_ACCESS);
char* pClAudioAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_AUDIO_SAMPLE_ACCESS);
char* pClVideoAccess = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_VIDEO_SAMPLE_ACCESS);
char* pClProto = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_PROTO);
char* pClUstem = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_URI_STEM);
char* pStreamName = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_NAME);
char* pStreamType = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE);
char* pStreamQuery = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_QUERY);
char* pStreamPath = getStringField(m_pAev, IFmsAuthEvent::F_STREAM_PATH);
float fValue;
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXSIZE, fValue))
float recMaxSize = fValue; // in kilobytes
if (getFloatField(m_pAev, IFmsAuthEvent::F_STREAM_RECORD_MAXDURATION, fValue))
float recMaxDuration = fValue; // in seconds
break;
case IFmsAuthEvent::E_SWF_VERIFY_COMPLETE:
char* pClIp = getStringField(m_pAev, IFmsAuthEvent::F_CLIENT_IP);
I8 version; // version of SWF verification
getI8Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_VERSION, version);
I64 depth; // depth in the SWF file hashed
getI64Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_DEPTH, depth);
I32 ttl; // time to live of the SWF hash provided
getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_TTL, ttl);
// digest provided to match against
U8* buffer = getBufferField(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_DIGEST);
// result of the attempted match-- see FmsAuthEvents.h enum
// eSWFMatch for the meaning of this field
I32 match;
getI32Field(m_pAev, IFmsAuthEvent::F_CLIENT_SWFV_RESULT, match);
std::stringstream stream;
stream << "swf verification for client: "
<< std::string(pClIp)
<< " is complete, the result is: " << match;
m_pFmsAuthServerContext->log(stream.str().c_str(), IFmsServerContext::kInformation, false);
break;
case IFmsAuthEvent::E_APPSTART:
case IFmsAuthEvent::E_APPSTOP:
case IFmsAuthEvent::E_CONNECT:
case IFmsAuthEvent::E_DISCONNECT:
case IFmsAuthEvent::E_FILENAME_TRANSFORM:
case IFmsAuthEvent::E_STOP:
case IFmsAuthEvent::E_PAUSE:
case IFmsAuthEvent::E_PUBLISH:
case IFmsAuthEvent::E_UNPUBLISH:
case IFmsAuthEvent::E_LOADSEGMENT:
case IFmsAuthEvent::E_ACTION:
case IFmsAuthEvent::E_RECORD:
case IFmsAuthEvent::E_CLIENT_PAUSE:
case IFmsAuthEvent::E_SWF_VERIFY:
case IFmsAuthEvent::E_CLIENT_SEEK:
case IFmsAuthEvent::E_START_TRANSMIT:
case IFmsAuthEvent::E_STOP_TRANSMIT:
case IFmsAuthEvent::E_MAXEVENT:
break;
char buf[1024];
sprintf(buf, "Received notification type=%d id=%p\n", m_pAev->getType(), m_pAev);
// log to the configured FMS log directory. If the third parameter is true,
// also send the log to the system event log.
m_pFmsAuthServerContext->log(buf, IFmsServerContext::kInformation, false);
m_pFmsAuthServerContext->onNotify(m_pAev);
/* All authorization events flow through this wrapper function.
* Note: This sample auth adaptor has MyFmsAppAuthEvent allocated on the
* stack, but time intensive implementations may warrant authorization to
* be allocated on the heap so work may be passed to a thread pool. This
* prevents starvation of the calling FMS threads in custom code that may
* have processing delays (ie database calls, network filesystem access, etc..).
void FmsAuthAdaptor::authorize(IFmsAuthEvent* pAev)
MyFmsAuthorizeEvent(pAev, m_pFmsAuthServerContext).authorize();
/* All notification events flow through this wrapper function.
* Note: This sample auth adaptor has MyFmsNotifyEvent allocated on the
* stack, but time intensive implementations may warrant notifications to
* be allocated on the heap so work may be passed to a thread pool. This
* prevents starvation of the calling FMS threads in custom code that may
* have processing delays (ie database calls, network filesystem access, etc..).
void FmsAuthAdaptor::notify(IFmsAuthEvent* pAev)
processStats(pAev);
MyFmsNotifyEvent(pAev, m_pFmsAuthServerContext).notify();
* Get client statistics.
bool FmsAuthAdaptor::getStats(I64 clientStatsHandle, FmsClientStats& baseStats)
bool bValue= m_pFmsAuthServerContext->getClientStats(clientStatsHandle, baseStats);
return bValue;
* Example obtainting client stats from an E_CONNECT or E_STOP event
void FmsAuthAdaptor::processStats(IFmsAuthEvent* pAev)
I64 statsHandle;
FmsClientStats baseStats;
if (!getI64Field(pAev, IFmsAuthEvent::F_CLIENT_STATS_HANDLE, statsHandle))
return;
char* pAppName = getStringField(pAev, IFmsAuthEvent::F_APP_NAME);
if (pAev->getType() == IFmsAuthEvent::E_CONNECT)
getStats(statsHandle, baseStats);
// log data
char buf[1024];
char hashKey[9];
memset(hashKey, 0, 9);
memcpy(hashKey, &statsHandle, sizeof(statsHandle));
sprintf(buf, "client Stats Handle= %s, bytes_in= %f, bytes_out= %f\n", hashKey,
static_cast<double>(baseStats.bytes_in), static_cast<double>(baseStats.bytes_out));
m_pFmsAuthServerContext->log(buf, IFmsServerContext::kInformation, false);
else if (pAev->getType() == IFmsAuthEvent::E_STOP)
getStats(statsHandle, baseStats);
/* By default, all authorization and notifications events will be sent.
* Call excludeEvents with the bit set to 1, to stop recieving events.
* Note: The events:
* E_APPSTART, E_APPSTOP, E_DISCONNECT, E_STOP, E_UNPUBLISH, E_CODEC_CHANGE
* are excluded by default and are not authorizable.
void FmsAuthAdaptor::getEvents(I32 aevBitAuth[], I32 aevBitNotf[], unsigned int count)
// exclude certain auth events
IFmsAuthEvent::EventType authExcludeEvent[] = { IFmsAuthEvent::E_SEEK };
// set E_SEEK to a non authorizable event
m_pFmsAuthServerContext->excludeEvents(aevBitAuth, count, authExcludeEvent, 1);
// Warning: if E_CODEC_CHANGE event is not excluded, all messages will be
// scanned to detect codec change. Subscribe to this event only as needed.
// Example that excludes certain notify events. (E_PAUSE, E_CODEC_CHANGE)
IFmsAuthEvent::EventType notifyExcludeEvent[] =
{ IFmsAuthEvent::E_PAUSE, IFmsAuthEvent::E_CODEC_CHANGE };
m_pFmsAuthServerContext->excludeEvents(aevBitNotf, count, notifyExcludeEvent, 2);
extern "C" void FCExport FmsCreateAuthAdaptor3(IFmsAuthServerContext2* pAuthServerCtx,
IFmsAuthAdaptor*& pFmsAuthAdaptor, U32& iVersion)
pFmsAuthAdaptor = new FmsAuthAdaptor(pAuthServerCtx);
U32 version = pAuthServerCtx->getVersion();
U16 w2 = LWORD(version);
U16 w1 = HWORD(version);
iVersion = MKLONG(INTERFACE_MINOR_VERSION, INTERFACE_MAJOR_VERSION);
char buf[1024];
char *ptr = buf;
int valueLen = pAuthServerCtx->getConfig("UserKey1", &ptr, sizeof(buf));
if (!valueLen)
valueLen = pAuthServerCtx->getConfig("UserKey2", &ptr, sizeof(buf));
if (!valueLen)
return;
if (valueLen < 0)
// failed to find this key
return;
if (valueLen < 0)
// failed to find this key
return;
// value length is bigger then the buffer size, and a real adaptor should
// allocate valueLen + 1 bytes and call again
extern "C" void FCExport FmsDestroyAuthAdaptor3(IFmsAuthAdaptor* pAuthAdaptor )
delete pAuthAdaptor;There is no API to Acrobat's document compare feature.
It is certainly possible for an experienced plug-in programmer to
create a new compare plug-in. For example, extract text from two PDFs
and compare it. Comparison algorithms have been much studied so should
be findable in academic literature.
Going beyond text comparison would be a major exercise.
Aandi Inston -
Is it possible to use an activeX object in aw rather than an
activeX control
I am trying to integrate a report writer into an aw program,
but the
suppliers have just informed me that it is NOT an activeX
control, rather an
activeX object.
Unfortunately not something I am familiar with.
Thanks for any helpI don't know VB script but do know that it is similar to
Authorware in
the way it can load ActiveX controls and the like. Often, the
folks I
work with, if asked to make something usually web-based work
locally
(commonly a Flash project), they'll embed it in VB to allow
the same
sort of local filesystem access I could achieve by doing the
same thing
in Authorware.
So, perhaps the VB example they have would shed some light on
the
approach? Of course, if VB has a way to load these mysterious
activeX
objects which Authorware does not, well, there you go...
Or, similarly, the 'online sample' on their site? If nothing
else,
perhaps that would show how to use this object in IE, which
you could
then embed into A'ware?
I was under the same impression as the others. I don't
understand what
an ActiveX object is compared to a control. Simply a data
file that some
applications know how to run without the, um, .ocx wrapper?
In that case, wouldn't it essentially be a .dll?
Erik
dave wrote:
> This was also my understanding, that it meant the same
thing, but there
> seems to be no activeX (ocx) file.
>
> It's from a company called process academy
> (
http://www.processacademy.ca/default.aspx),
they have report writing
> software that you can embed in different technologies.
Erik Lord
http://www.capemedia.net
Adobe Community Expert - Authorware
http://www.adobe.com/communities/experts/
http://www.awaretips.net -
samples, tips, products, faqs, and links!
*Search the A'ware newsgroup archives*
http://groups.google.com/group/macromedia.authorware
*The Blankenship Caveat: Note that direct linking to http
content
through any Authorware icon will likely fail if a proxy
server is present!* -
Could not open DVD with libdvdcss
I installed vlc, xine-lib, xine-ui, mplayer, libdvdcss, libdvdnav, libdvdread.
I also installed "codecs" with packer.
I'm trying to play two different DVDs and the following is what I get (even putting the disk into /dev/sr0 or using another DVD won't change):
$ vlc /dev/sr1
VLC media player 2.1.5 Rincewind (revision 2.1.4-49-gdab6cb5)
[0x95b1220] pulse audio output error: PulseAudio server connection failure: Connection refused
[0x952a8f8] main libvlc: VLC wird mit dem Standard-Interface ausgeführt. Benutzen Sie 'cvlc', um VLC ohne Interface zu verwenden.
libdvdnav: Using dvdnav version 4.2.1
libdvdread: Could not open /dev/sr1 with libdvdcss.
libdvdread: Can't open /dev/sr1 for reading
libdvdnav: vm: failed to open/read the DVD
[0xb20a5e48] filesystem access error: read error: Input/output error
[0xb39a6e10] main stream error: cannot pre fill buffer
libdvdnav: Using dvdnav version 4.2.1
libdvdread: Could not open /dev/sr1 with libdvdcss.
libdvdread: Can't open /dev/sr1 for reading
libdvdnav: vm: failed to open/read the DVD
libdvdread: Could not open /dev/sr1 with libdvdcss.
libdvdread: Can't open /dev/sr1 for reading
[0xb1abe3f8] dvdread demux error: DVDRead cannot open source: /dev/sr1
[0xb5a03700] main input error: open of `dvd:///dev/sr1' failed
$ mplayer /dev/sr1
MPlayer SVN-r37224 (C) 2000-2014 MPlayer Team
210 audio & 441 video codecs
Playing /dev/sr1.
File not found: '/dev/sr1'
Failed to open /dev/sr1.
Exiting... (End of file)
$ xine /dev/sr1
Dies ist xine (X11 gui) - Ein freier Video-Player v0.99.8-[DEBUG].
(c) 2000-2010 The xine Team.
videowin: display is using xinerama with 1 screens
videowin: going to assume we are using the first screen.
videowin: size of the first screen is 1024x768.
videowin: Xinerama fullscreen parameters: X_origin=0 Y_origin=0 Width=1024 Height=768
pixel_aspect: 0.997627
Failed to open VDPAU backend libvdpau_nouveau_vieux.so: Kann die Shared-Object-Datei nicht öffnen: Datei oder Verzeichnis nicht gefunden
vo_vdpau: Can't create vdp device : No vdpau implementation.
xv_set_property: property=1, value=0
xine: could not connect to socket
xine: Datei oder Verzeichnis nicht gefunden
this is my video card
01:00.0 VGA compatible controller: NVIDIA Corporation NV11 [GeForce2 MX200] (rev b2) (prog-if 00 [VGA controller])
Subsystem: CardExpert Technology Device 0001
Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 16
Memory at d6000000 (32-bit, non-prefetchable) [size=16M]
Memory at d8000000 (32-bit, prefetchable) [size=128M]
Expansion ROM at d7ff0000 [disabled] [size=64K]
Capabilities: [60] Power Management version 2
Capabilities: [44] AGP version 2.0
Kernel driver in use: nouveau
Kernel modules: nouveau
these commands were asked me on freenode's #archlinux channel:
$ stat /dev/sr0
Datei: „/dev/sr0“
Größe: 0 Blöcke: 0 EA Block: 4096 blockorientierte Spezialdatei
Gerät: 5h/5d Inode: 6351 Verknüpfungen: 1 Gerätetyp: b,0
Zugriff: (0660/brw-rw----) Uid: ( 0/ root) Gid: ( 93/ optical)
Zugriff : 2014-07-12 22:52:20.959057344 +0200
Modifiziert: 2014-07-12 22:52:20.959057344 +0200
Geändert : 2014-07-12 22:52:20.959057344 +0200
Geburt : -
$ getfacl /dev/sr0
# file: dev/sr0
# owner: root
# group: optical
user::rw-
user:christian:rw-
group::rw-
mask::rw-
other::---
$ loginctl show-session $XDG_SESSION_ID -p Active
Active=yes
I feel like some other driver is missing...
Last edited by leonixyz (2014-07-12 21:58:01)dodo3773 wrote:Can you test a regular video file and it works fine in vlc?
ok, one step toward the solution:
I've scp-ed an .mp4 and an .mpg from my laptop, chmod 777 them and finally I can play them
dodo3773 wrote:
Also, do you get any output from this command?:
dmesg | grep CD
$ dmesg | grep CD
[ 1.227637] scsi 0:0:0:0: CD-ROM HL-DT-ST CD-RW GCE-8320B 1.02 PQ: 0 ANSI: 5
[ 1.238061] scsi 0:0:1:0: CD-ROM LG DVD-ROM DRD8160B 1.01 PQ: 0 ANSI: 5
[ 1.458996] cdrom: Uniform CD-ROM driver Revision: 3.20
[ 1.459461] sr 0:0:0:0: Attached scsi CD-ROM sr0
[ 1.471069] sr 0:0:1:0: Attached scsi CD-ROM sr1
[ 1286.396790] sr 0:0:1:0: [sr1] CDB:
[ 1286.426850] sr 0:0:1:0: [sr1] CDB:
$ pacman -Qi vlc
Name : vlc
Version : 2.1.5-1
Beschreibung : A multi-platform MPEG, VCD/DVD, and DivX player
Architektur : i686
URL : http://www.videolan.org/vlc/
Lizenzen : LGPL2.1 GPL2
Gruppen : Nichts
Stellt bereit : Nichts
Hängt ab von : a52dec libdvbpsi libxpm libdca qt4 libproxy sdl_image libdvdnav libtiger
lua libmatroska zvbi taglib libmpcdec ffmpeg faad2 libupnp libshout libmad
libmpeg2 xcb-util-keysyms libtar libxinerama
Optionale Abhängigkeiten: avahi: for service discovery using bonjour protocol[Installiert]
libnotify: for notification plugin[Installiert]
ncurses: for ncurses interface support[Installiert]
libdvdcss: for decoding encrypted DVDs[Installiert]
lirc-utils: for lirc plugin[Installiert]
libavc1394: for devices using the 1394ta AV/C
libdc1394: for IEEE 1394 plugin
kdelibs: KDE Solid hardware integration
libva-vdpau-driver: vdpau back-end for nvidia[Installiert]
libva-intel-driver: back-end for intel cards
libbluray: for Blu-Ray support[Installiert]
flac: for Free Lossless Audio Codec plugin[Installiert]
portaudio: for portaudio support
twolame: for TwoLAME mpeg2 encoder plugin
projectm: for ProjectM visualisation plugin
libcaca: for colored ASCII art video output[Installiert]
libgme: for libgme plugin
librsvg: for SVG plugin[Installiert]
gnome-vfs: for GNOME Virtual File System support
libgoom2: for libgoom plugin
vcdimager: navigate VCD with libvcdinfo
aalib: for ASCII art plugin[Installiert]
libmtp: for MTP devices support
smbclient: for SMB access plugin[Installiert]
libcdio: for audio CD playback support[Installiert]
ttf-freefont: for subtitle font
ttf-dejavu: for subtitle font
opus: for opus support[Installiert]
libssh2: for sftp support[Installiert]
lua-socket: for http interface
Benötigt von : Nichts
Optional für: Nichts
Konflikt mit : vlc-plugin
Ersetzt : vlc-plugin
Installationsgröße: 44319,00 KiB
Packer : Giovanni Scafora <[email protected]>
Erstellt am : Mi 09 Jul 2014 15:14:36 CEST
Installiert am : Sa 12 Jul 2014 21:15:04 CEST
Installationsgrund : Ausdrücklich installiert
Installations-Skript : Ja
Verifiziert durch: Signatur -
How to view the content (contained objects) of transport files without importing?
Hi,
we do often receive transport files (DATA and CODILE) from third parties.
If is is done correctly the supplier of the transport files devliver also additional information about the detailed content of the transport, e.g object lists as plain text file, so that we are informed which objekts will be imported in advance.
But some suppliers don't. Or we want only check, if additional info and real transport content match.
So for that reason I am looking for a possible way to view the object list of such transports without adding it to the import queue or importing it to a sandbox system or even add it to the import buffer..
Most likely this should be done by a standalone tool (on Windows) or a tool running on SAP accessing the transportfiles (preference: stored only on the client PC and not added to the transport directory)
So my question is: Is there any tool that can extract the object list from the transport files and display it?
Helst regards
Helmut FischerHelmut,
If you don't have access to the server console, it might be possible to 'trick' tp into working from a workstation, but I wouldn't bet on it. You'd have to fake up a profile for it. I haven't tried this.
Peering into the contents of a delivered transport file would be something that your Basis team would typically do. My suggestion is to work with them, either to use tp command-line option from the server console, or if that's not reasonable, then yes, go ahead and add it to the import queue of one of your sandbox systems. You can always delete it from the queue again later. If you don't actually import it, it isn't going to hurt anything.
To do any of these options is going to require some level of filesystem access to your transport host, as you need to copy the two files that make up the transport there. You need to put the 'K' file into \usr\sap\trans\cofiles and the 'R' file into \usr\sap\trans\data. Then, you can either use the tp command-line tool, or you can go into STMS, go into the import queue of any system in the transport domain (so a sandbox is fine), and use Extras... Other Requests... Add and type in the transport request ID. Yes, this adds some entries about the transport into a few tables, but it doesn't actually import the transport, and it doesn't change anything about your system. It just allows the transport to show up as importable in the queue, and that will make it so that you can read the object list of the transport. Then, if you decide not to import it, you can delete it from the queue, and your system is back to the way it was before. Also, doing this will not put the transport into any other system's queue. Even if you import the transport (into a sandbox system), it won't show up in any other system's queue until you forward it.
Regards,
Matt -
Bluetooth problems all around - Modem in the first row.
Hi there,
I've got a really annoying problem with the Bluetooth Setup of my Mac. Like you can see in my system description, I use Mac OS X 10.5.6. For a long time I used my old mobile via Bluetooth and GPRS as a Modem. Now it was time for a change. I bought a new mobile which supports 3G (Nokia 5800 Xpress Music).
I used the Bluetooth Wizard and told him to use all possible bluetooth functions of my device. I looked in the internet for the right configuration (APN, CID,...) and choosed to use the Nokia GPRS/3G Modem script which is preinstalled in Mac OS X (I also tried another one from www.taniwha.org.uk, it didn't work either).
The very strange thing is, the first connection worked without any problem, but after disconnecting and reconnecting it didn't work anymore. Instead I've got a message that the RFCOMM-Channel can't be opened.
I tried to fix the problem myself by searching wrong settings in some plists, but although I restored the original settings after recognizing that my changes didn't work, I've got a new problem.
Now the status symbol of the bluetooth modem always shows up that no modem configuration could be found, although I can still try to connect via Network -> Bluetooth. Of course it doesn't work this way too.
Sometimes the bluetooth modem works once after a reboot ( not after every reboot ). But only once!
File Transfer always works! The Nokia Multimedia Transfer also always works.
I definitely need advice of some of you, experts.
I'd love to hear from you!Hi,
sorry, but the problem isn't solved yet. I tried different things but nothing helped:
I backuped and deleted the following Files:
/Library/Preferences/SystemConfiguration/Preferences.plist
/Library/Preferences/com.apple.Bluetooth.plist
/Users/benutzername/Library/Preferences/ByHost/com.apple.BluetoothHASH.plist
But it didn't help. In fact it made things worse. Therefore I restored the backuped files.
I deleted all bluetooth devices and installed just my new phone a bunch of times. - No change at all.
I used FSEventer to control the Filesystem Access. That leaded me only to the files mentioned above.
In the log-file:
/private/var/log/ppp.log
is the following error message logged:
Failed to open /dev/cu.Bluetooth-Modem: Resource busy
Up until now, I don't understand why this resource is busy.
I figured out, that the modem works using a USB-connection. That isn't a satisfying solution but it works for now.
Nevertheless I am still really interested in resolving the Bluetooth problem. -
RAM usage increases with time, problem?
Hi all,
Whislt I've been playing with linux on the side for a few years the past few weeks have been my first foray into using linux as my main OS, in the form of Arch. It's been a steep learning curve but I'm enjoying the experience and wealth of information. Previous flirts with Linux have been groping in the dark, pasting code from the internet and avoiding the terminal where possible.
Since going Arch full time I've noticed the RAM usage seems to increase when I leave it alone for a few hours. I'm running an old, around 2005 I think, Advent Laptop with 512MB, or 466MB according to free -m, RAM. I've allocated 2GB to swap which it dips into occasionally.
Typically I've been leaving open luakit & urxvt whislt running Awesome. If I leave it for a few hours and return the RAM has jumped from 30% or so to 80 or 90%. A reboot solves this.
I had a look around the interwebs but this is the first time my wed-fu has not unearthed one of those wonderful arch articles/post on what to do.
Any suggestions, or anything I can do to clarify the issue?It does indeed, but only while the system is being actively accessed, as far as I know. An idle system (i.e. with no filesystem access) will have a stagnant file cache.
So I guess the question here would be, is your PC idle while you're "leaving" it? Do you use it as a fileserver, webserver, database, etc, or do you ssh in perform various tasks? Does 'free' report your free '-/+ buffers/cache' value as something minute? -
Running reports stored in the database
Hi guys,
Is it possible to have Reports 6i produce reports that are
stored in the database? Looking at the documentation, it would
appear the report definition files (RDF) must be stored in the
filesystem. I don't really want to be handing out filesystem
access (managing and it) to people - is there a way around this?
Thanks,
denty.user5780461 wrote:
Hi,
Would anyone have any recommendations regrading running reports based on the data stored in an oracle database. We will soon go live with a project using an oracle DB. We do not wish to run reports directly from the production DB as it will impact performance. Have you actually measured the impact? If not, you are just making assumptions that -- lacking any other informatin -- appear to be invalid.
Is there any recommended method/architecture for reporting suggested by oracle for this type of scenario?
You make it sound like some unusual scenario. What you've described so far (running reports against an OLTP database) is just bread and butter operations for Oracle.
One idea is too runs some scripts that will write the data to another database and from there we will runs out reporting queries. Are there any other potential solutions?
And how does reading the data to insert into some other database cause less contention than reading data for a report?
>
Many thanks,
Ro -
My Mac Won't Sleep!!!
And display keeps dipping to blue every so often.
Display preferences shows a second display preferences window for a VGA monitor, even though I do not have any secondary monitor attached.I can't put my machine to sleep because it keeps dipping to blue as if it's trying to access this mystery display. When using, every three minutes or so will dip to same blue background and resume after a couple of seconds. Have reset pram, repaired disk permissions.
iMac G5 (isight) OS X 10.4.11
Any ideas?Did you restart your computer after repairing permissions?
Try this:
Change the energy saving options, to put the display to sleep and the computer to sleep at the same time.
Enable (check mark) put the hard disk to sleep when possible.
Lock the padlock.
Optional: Repair permissions &/or restart.
==============
Check your Energy Saver settings to make sure they are correct.
See if you can put your computer to sleep w/your remote.
See Knowledge Base Article http://docs.info.apple.com/article.html?artnum=301733 iMac G5: How to Reset the SMU (iMac G5, the iMac G5 (Ambient Light Sensor), and the iMac G5 (iSight)). -
Import Scenario from BPR - how to view the Version after import
On SOLAR01 when you import scenarios from the BPR, how can you view the version of the Products that were imported? Sometimes in the BPR there are several versions available to import for a particular product.
Once you have imported those business processes, how can you see the version that is tied to the one you imported?Helmut,
If you don't have access to the server console, it might be possible to 'trick' tp into working from a workstation, but I wouldn't bet on it. You'd have to fake up a profile for it. I haven't tried this.
Peering into the contents of a delivered transport file would be something that your Basis team would typically do. My suggestion is to work with them, either to use tp command-line option from the server console, or if that's not reasonable, then yes, go ahead and add it to the import queue of one of your sandbox systems. You can always delete it from the queue again later. If you don't actually import it, it isn't going to hurt anything.
To do any of these options is going to require some level of filesystem access to your transport host, as you need to copy the two files that make up the transport there. You need to put the 'K' file into \usr\sap\trans\cofiles and the 'R' file into \usr\sap\trans\data. Then, you can either use the tp command-line tool, or you can go into STMS, go into the import queue of any system in the transport domain (so a sandbox is fine), and use Extras... Other Requests... Add and type in the transport request ID. Yes, this adds some entries about the transport into a few tables, but it doesn't actually import the transport, and it doesn't change anything about your system. It just allows the transport to show up as importable in the queue, and that will make it so that you can read the object list of the transport. Then, if you decide not to import it, you can delete it from the queue, and your system is back to the way it was before. Also, doing this will not put the transport into any other system's queue. Even if you import the transport (into a sandbox system), it won't show up in any other system's queue until you forward it.
Regards,
Matt -
Hi
I'm a student stuck on a really crappy course my teacher has taught me nothing about java and CORBA and given me a coursework on it :(
I just want 2 use this program client/server type with CORBA, it checks a users ID and username against those held in a database
Can any1 help me do that please??
import javax.swing.JOptionPane;
import java.sql.*;
public class log
public static void main(String[] args)
//client
String UserId;
String Password;
UserId = JOptionPane.showInputDialog("Eneter your UserID"); // were the user eneters his User
Password = JOptionPane.showInputDialog("Eneter your Password");//were the user eneters his Password
//server
try {
//have to be in a try catch block
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//setting up the database
String dataSourceName = "cw2";
String dbURL = "jdbc:odbc:" + dataSourceName;
Connection con = DriverManager.getConnection(dbURL, "","");
//setting up the database
Statement stmt = con.createStatement();
String query = "SELECT Username , password FROM LOG"; // find the values and printen them out
ResultSet rs = stmt.executeQuery(query);
String s, n;
boolean flag = false;
while(rs.next())
s = rs.getString("UserName");
n = rs.getString("password");
if(s.equals(UserId) && n.equals(Password))
flag = true;
System.out.println( " access allowed " );
//grant access
break;
} //if
} //while
if(flag == false)
System.out.println( " access refused " );
//deny access
catch (Exception err) {
System.out.println("ERROR: " + err);
System.exit(0);
idl file
module myapp
interface validator
boolean validate_user(in wstring username, in string password);Why not take a look at the tutorials?
http://java.sun.com/j2se/1.4.1/docs/guide/idl/index.html
http://java.sun.com/j2se/1.4.1/docs/guide/corba/index.html
You could adapt the Hello World IDL from the tutorial from
module HelloApp
interface Hello
string sayHello();
oneway void shutdown();
to something like
module Security
interface ClientVerifier
boolean allowAccess(in wstring name, in wstring password); -
Old Exchange 2007 is not moving MAPI clients to new server
Good Afternoon all,
I am in the process of moving from exchange 2007 to 2010. I thought I read somewhere that Outlook will figure out in the background that there is a new exchange box and when I've moved everyone to it that Outlook clients will automatically be mapped
to the new server. I have moved 5 people over and all 5 did not re-map to the new exchange server. I even tried closing/re-opening the app and rebooting the computer. Did I miss a step somewhere? Thanks in advance as I have 160 mailboxes
to move over. I'd like to do it gradually if the system will allow me to rather than do it all in one go.
Thanks
David
EDIT-- My mobile users that I have moved are also reporting not getting email on their phones. Mix of iphones and droid. Tried rebooting and re-installing the Exchange profile. Seems as though external access breaks as well.Hi There!!!!
In Exchange 2010, clients do not connect directly to the mailbox role, they go through the
CAS role, so it sounds like you need to set the RPCClientAccessServer to point to the new Exchange 2010 server.
Do this via PowerShell :
GET-MAILBOXDATA | SET-MAILBOXDATABASE -RPCCLIENTACCESSSERVER <FQDN OF NEW CAS SERVER>
But as you have 160 mailboxes to migrate , which would be quite time consuming and needs lots
of efforts, so rather than opting manual way for migration I would refer you to do this using any professional Migration Software like Stellar Mailbox Extractor for Exchange Server, which can perform the Migration of 160 mailboxes in quick time.
Maybe you are looking for
-
Crystal report server2008 (XI R2): CMC session timeout error
HI Crystal report server2008 (XI R2): CMC session timeout error Accessing folders, scheduling reporting or running reports are working fine with Central Management Console (CMC) within the Crystal report server or accessing CMC within VPN
-
ArialUnicodeMS is missing error when opening PDF
Hi I have Adobe Reader v9.0 on Windows XP SP3 When I try to open PDF document I get this error: "Cannot find or create the font 'ArialUnicodeMS'. Some characters my not display or print correctly" The document then open in gibrish. Please advise. Tha
-
Down-level Poster.png just a white box on IE8
Hi everyone, I've created a very simple Edge Animate banner consisting of a background image and two layers of text that fade in, it shows up perfectly in everything except for (understandably) IE8 and I assume IE7, all I see is a white box. I insert
-
I am having a problem getting EULA to suppress on my install of Adobe Acrobat X Standard. I am using SCCM and the OSD to install it into the reference image and have used the Adobe customization wizard X to build my silent install package. In the
-
Hi! I have a situation - i have more than 2 separate method that will insert and update to different tables in our database. The problem is, all the tables should be successfully commit or rollback. Is it possible to commit all the transaction in dif