views:

201

answers:

3

I have this string that I get back from Adobe Presenter 7. It's called suspend_data and is of type CMIString4096 (by the docs)

CMIString4096 A set of ASCII characters with a maximum length of 4096 characters.

This is the string:

aG1111111000000000BB001EC%2EacC%7E%24GS%2AayjHm110BKCBBB0B0EBAB1B1ED%2EicC%7E%24GS%2AlfkHm110BKDBCB0B0EBBB0B0EBAB1B1EE%2EwcC%7E%24GS%2ACBlHm100BKDB2BCBCDB1BABBDB0BBBADF%2E7cC%7E%24GS%2A4GmHm110BKBB0Ebl%C3%A1rRbl%C3%A1r%3Bgr%C3%A6nn%3Brau%C3%B0urB

It looks like base64 with some urlencoded characters. When i urldecode() the string, the last few characters resemble some data but it's in utf8, then i utf8_decode it and see this.

aG1111111000000000BB001EC.acC~$GS*ayjHm110BKCBBB0B0EBAB1B1ED.icC~$GS*
lfkHm110BKDBCB0B0EBBB0B0EBAB1B1EE.wcC~$GS*CBlHm100BKDB2BCBCDB1BABBDB0BBBADF.
7cC~$GS*4GmHm110BKBB0EblárRblár;grænn;rauðurB

Ok i'm closer to some data (at the end), but it still looks like it's a mess. When i base64_decode() it i get some binary mess, but i don't know what on earth it is.

Does anyone know what this data is and how i can get some sense out of it? I'm using PHP btw so only functions within it are applicable.

+1  A: 

I don't think that SCORM defines what the suspend_data field contains or in what format it is. This is entirely up to the content/lesson (Adobe Presenter in your case), but it can only be text and is limited to 4096 characters.

This field can be used by the content to store any kind of state which should be passed back to the content the next time it is started.

M4N
So it's just junk that Adobe Presenter uses for some reason?
Ólafur Waage
+1  A: 

Found

13. cmi.suspend_data

Read / Write

Intended to act as a location to store any information that a SCO would like to persist until a subsequent session.

in here. So as Martin wrote SCORM only defines the data type and not the encoding or the content of cmi.suspend_data. Perhaps this could help you in determining the encoding.

Stefan Gehrig
+1  A: 

The data stored in the cmi.suspend_data field is simply a bucket of data that the SCO (the the content) can use to persist its current state. There is no semantic meaning or defined structure to the data. In many cases, the meaning of the data can be guessed at or reversed engineered, but that does not appear to be the case in with content produced by Adobe Presenter.

The suspend_data field is limited to 4096 ASCII characters. For some SCOs this doesn't provide enough storage to fully persist the current state. In many cases, a content developer faced with this predicament will apply a compression algorithm to the state data in order to squeeze it into the limited size. It looks like that is what Adobe Presenter is doing here. My guess is that they compressed their data to the unencoded state that you found, then applied url encoding to ensure that all of the resulting characters were safe to send to the LMS.

The string of 1's and 0's at the start of the suspend data might be something meaningful. It could likely correspond to which of the slides in the course have been previously viewed by the learner. To verify this, it might be helpful to run the course through a tool like SCORM TestTrack (freely available at scorm.com, sorry new stackoverflow users can only post one hyperlink) and use the generated debug logs to watch how the suspend data changes as the user progresses through the course.

SCORM provides quite a few other data model elements which do have a specific meaning relating to the current status of the course. Here is a list of all available data model elements. The SCORM TestTrack debug logs will also show you which of those data model elements Adobe Presented content uses.

Mike Rustici
Awesome answer, thank you :)
Ólafur Waage