Archive for January, 2014

How to Solve Port 80 Problems when running Adobe Connect on windows server and logs shows port 80 is already in use.

Mostly in such situation the homepage wouldn’t show up however the console page works just fine.

There are a number of well-known Windows programs which use port 80:

IIS
The most likely culprit is Microsoft Internet Information Server.

SQL Server Reporting Services
SSRS can remain active even if you uninstall SQL Server. To stop the service:

  1. Open SQL Server Configuration Manager.
  2. Select “SQL Server Services” in the left-hand pane.
  3. Double-click “SQL Server Reporting Services”.
  4. Hit Stop.
  5. Switch to the Service tab and set the Start Mode to “Manual”.

Or

You can also stop the services from services.msc

Whats Using Port 80?

Further detective work is necessary if IIS and SSRS are not to blame. Enter the following on the command line:

netstat -aon

The active TCP addresses and ports will be listed — locate the line with local address “0.0.0.0:80″ and note the PID value.

Now right-click the task bar and select Start Task Manager. Navigate to the Processes tab and, if necessary, click View > Select Columns… to ensure “PID (Process Identifier)” is checked. You can now locate the PID you noted above. The description and properties should help you determine which application is using the port.

The Task Manager allows you to kill the process, but be a little wary about doing that — especially if it’s “NT Kernel & System”.

I Hope this would be helpful at some instances

Thanks

Adobe Connect Directory Service Integration for LDAP Sync and Authentication – Explained

The following article is intended to show how the directory service integration works with the current release of Adobe Connect 9.1 and how it relates to setting up a synchronization. I will follow this article up with another regarding Authentication.  For the most part, this is applicable for any flavor of Adobe Connect 8 or 9.  Continue reading…

Identifying Telephony Disconnects

One common request from Adobe Connect users is to find out why a user may have gotten disconnected from a conference call while using Adobe Connect.  The important thing to realize here is that Adobe Connect will only disconnect a user from a conference call (with integrated telephony adaptor in place) if that user or a host in the meeting very deliberately choses one of a couple of options to disconnect the user.

The options for the in-meeting telephony disconnects are shown below:

tel1

This is what an individual user can access to disconnect their phone.

tel2

This is what a Meeting Host can do in the Attendee List pod, to hang up a user’s line.

Other than using these options, Adobe Connect does NOT send API commands to the telephony provider to hang up a conference user.  So a common scenario we may have is to identify whether Adobe hung up a user (via a very deliberate action) or whether the user was hung up by an external action (external to Adobe Connect). We do so by looking at the Adobe logs in conjunction with the Telephony Provider’s logs (PGI, InterCall, MeetingOne, Arkadin, etc).

On the Telephony Provider side, they can also differentiate between receiving an API from Adobe to disconnect a user vs just getting notification that the line is no longer active (which happens when a user is hung up for a reason between the Provider and Adobe).

User phone connections can drop for a variety of reasons.  Cell phone reception being dropped, IP phone connections (relying on an internet connection) going up and down (VPN, etc), user accidentally hanging up their own phone, a provider or carrier setting that sets a maximum connection time that gets exceeded, or a general carrier outage or issue in between Adobe and the Provider.  This is the most common.  Sometimes we see where a specific carrier will have a routing issue or other type of problem and it will interrupt that user’s connection to the conference.  These are outside of the realm of Adobe support and what needs to happen in this case is that the users must open a ticket with their Provider and through their Provider, they can have them track the possible route of the calls through the specific carriers involved, to see where the disconnect and problem occurred.

With regards to log analysis (overview article of the applicable logs needed), here is a breakdown (example) of the two scenarios for each of the main telephony providers we serve on our Hosted and Licensed environment (sans Avaya). ( I have ‘x’ed out some items like urls, conference codes, and phone numbers ):

MeetingOne

For an Adobe responsible hangup (deliberate):

In the meeting (application.log) log we will see:

2014-01-23 08:39:02 5552 (s)2641173 TelephonyServiceConnector, Calling action: conference-call-out -
2014-01-23 08:39:02 5552 (s)2641173 Asc-Telephony IS_HANG_UP_USER Hangup a user. TS CALL-10 conference-call-out -
2014-01-23 08:39:02 5552 (s)2641173 Asc-Telephony IS_HANG_UP_USER Hangup a user. TS RESP-10 conference-call-out -

In the MeetingOne_Adaptor.log we will see:

Jan 23, 2014 8:39:02 AM com.meetingone.adobeconnect.MeetingOneAdobeConnectAdaptor hangUp
INFO: entering hangUp
confId=5471dac0-fda8-4319-b8fe-c6b2a6942e73telephonyUserId=29834e741439299a5f251ed
Jan 23, 2014 8:39:02 AM com.meetingone.adobeconnect.bridge.BridgeProxyImpl hangUp
INFO: Bridge proxy – hangUp
Jan 23, 2014 8:39:02 AM com.meetingone.adobeconnect.bridge.BridgeProxyImpl sendXML2APIServer
INFO: posting xml to http://xxxxxxxxxx:80/api/audio?token=BRZ5930ecc7e013c5e76828ba7714390c7ae1d1b8

In the TelephonyService.log we will see:

[2014-01-23 08:39:02,255] [FCSj_Worker:8] (DEBUG) rtmp.RTMPConnection – Calling telephony action on request from MeetingApp. action: conference-call-out, parameters: {telephony-user-id=29834e741439299a5f251ed, conference-id=5471dac0-fda8-4319-b8fe-c6b2a6942e73, unset=true, action=conference-call-out, adaptor-id=meetingone-adaptor}
[2014-01-23 08:39:02,768] [FCSj_Worker:8] (DEBUG) rtmp.RTMPConnection – Returning telephony action response to MeetingApp. acrion: conference-call-out, response: {code=ok}

For an external hangup (not due to Adobe):

In the meeting (application.log) log we will see:

2014-01-23 08:51:47 5552 (s)2641173 Asc-UserManager IS_SET_USER_PHONE_STATUS set user phone status  { userID=1, phoneStatus=0 } -
2014-01-23 08:51:47 5552 (s)2641173 shouldBeKilled p_userID=1 advUserDesc.isNotInLive=false -
2014-01-23 08:51:47 5552 (s)2641173 dispatchEventToClient: p_evtObj.type=userPhoneStatusChanged p_isAdvancedEvent=true -
2014-01-23 08:51:47 5552 (s)2641173 dispatchRPCEventToClient: userId=1 p_evtObj.type=userPhoneStatusChanged -

In the MeetingOne_Adaptor.log we will see:

Jan 23, 2014 8:51:47 AM com.meetingone.adobeconnect.bridge.BridgeProxyEventPump parseEvents
INFO: <?xml version=”1.0″ encoding=”UTF-8″?>
<m1_api_events>
<api_response id=”29834e74:1439299a5f2:-514b” status=”0″ >
<events>
<event source_id=”xxxxxxxxxx” source=”audio” timestamp=”2014-01-23T09:49:59.458-07:00″ id=”2706933″><type>OnHangUp</type><parameters count=”4″><int_param name=”status”>0</int_param><string_param name=”participant_id”>81652</string_param><string_param name=”room_id”></string_param><int_param name=”reason”>0</int_param></parameters></event>
</events>
</api_response>
</m1_api_events>
Jan 23, 2014 8:51:47 AM com.meetingone.adobeconnect.bridge.messageDispatcher run
INFO: processing events…
Jan 23, 2014 8:51:47 AM com.meetingone.adobeconnect.bridge.messageDispatcher run
INFO: received event OnHangUp
Jan 23, 2014 8:51:47 AM com.meetingone.adobeconnect.bridge.messageDispatcher ProcessHangupResponse
INFO: ProcessHangupResponse
Jan 23, 2014 8:51:47 AM com.meetingone.adobeconnect.bridge.BridgeProxyEventPump GetEvents
INFO: Get events

In the TelephonyService.log we will see:

[2014-01-23 08:51:47,249] [Timer-6] (DEBUG) rtmp.RTMPConnection  - Calling MeetingApp method. methodName: telephonyUserOffline, parameters: {telephony-user-id=29834e741439299a5f25157, conference-id=5471dac0-fda8-4319-b8fe-c6b2a6942e73}

 

Arkadin

For an Adobe responsible hangup (deliberate):

In the meeting (application.log) log we will see:

2014-01-24 11:47:45 42656 (s)2641173 TelephonyServiceConnector, Calling action: conference-call-out -
2014-01-24 11:47:45 42656 (s)2641173 Asc-Telephony IS_HANG_UP_USER Hangup a user. TS CALL-10 conference-call-out -
2014-01-24 11:47:45 42656 (s)2641173 Asc-Telephony IS_HANG_UP_USER Hangup a user. TS RESP-10 conference-call-out -

In the Arkadin_Adaptor.log we will see:

[11:47:45] – [Verbose] [122421585] =>Bamboo : POST: <Arka_Trans MessageId=”Adobe2285″>    <Arka_Drop UserId=”111248954663623″ ResponseURL=”https://xxxxxxx.adobeconnect.com/servlet/bamboo” ConfId=”6505088d-bf01-4b66-8b7c-35e2cf195a06\1″ MessageId=”Adobe2284″/></Arka_Trans>
[11:47:45] – [Info] [122421585] drop(122421585<6505088d-bf01-4b66-8b7c-35e2cf195a06\1>, Jim Johnson<111248954663623>)
[11:47:45] – [Verbose] [122421585] <=Adobe : hangUp(122421585, 7b15ec77-3c0a-439f-bc7f-d1fd77eb593b);
[11:47:46] – [Verbose] [122421585] =>Adobe : userOffline(7b15ec77-3c0a-439f-bc7f-d1fd77eb593b)
[11:47:46] – [Info] [122421585] PARTICIPANT_LEFT(122421585<6505088d-bf01-4b66-8b7c-35e2cf195a06\1>, Jim Johnson<111248954663623>)
[11:47:46] – [Verbose] [122421585] <=Bamboo : <Arka_NotifyUserLeave ConfId=”6505088d-bf01-4b66-8b7c-35e2cf195a06\1″ MessageId=”18″ UserId=”111248954663623″/>

In the TelephonyService.log we will see:

[2014-01-24 11:47:45,272] [FCSj_Worker:6] (DEBUG) rtmp.RTMPConnection – Calling telephony action on request from MeetingApp. action: conference-call-out, parameters: {telephony-user-id=7b15ec77-3c0a-439f-bc7f-d1fd77eb593b, conference-id=xxxxxxxxxx, unset=true, action=conference-call-out, adaptor-id=arkadin-adaptor}
[2014-01-24 11:47:45,272] [FCSj_Worker:6] (DEBUG) rtmp.RTMPConnection – Returning telephony action response to MeetingApp. acrion: conference-call-out, response: {code=ok}
[2014-01-24 11:47:46,600] [Thread :: bambooEvents] (DEBUG) rtmp.RTMPConnection – Calling MeetingApp method. methodName: telephonyUserOffline, parameters: {telephony-user-id=7b15ec77-3c0a-439f-bc7f-d1fd77eb593b, conference-id=xxxxxxxxxx}

For an external hangup (not due to Adobe):

In the meeting (application.log) log we will see:

2014-01-24 12:14:49 26224 (s)2641173 Asc-UserManager IS_SET_USER_PHONE_STATUS set user phone status { userID=2, phoneStatus=0 } -
2014-01-24 12:14:49 26224 (s)2641173 shouldBeKilled p_userID=2 advUserDesc.isNotInLive=true -
2014-01-24 12:14:49 26224 (s)2641173 dispatchEventToClient: p_evtObj.type=userPhoneStatusChanged p_isAdvancedEvent=true -
2014-01-24 12:14:49 26224 (s)2641173 dispatchRPCEventToClient: userId=2 p_evtObj.type=userPhoneStatusChanged -
2014-01-24 12:14:49 26224 (s)2641173 Remove the user 2 -
2014-01-24 12:14:49 26224 (s)2641173 Asc-UserManager IS_REMOVE_USER Removing user. { userID=2, eject=undefined } -

In the Arkadin_Adaptor.log we will see:

[12:14:49] – [Verbose] [122421585] <=Bamboo : <Arka_NotifyUserLeave ConfId=”9e73d0b5-0525-4e17-9d77-af7a1e42a0e7\1″ MessageId=”9″ UserId=”26147684307333456″/>
[12:14:49] – [Info] [122421585] PARTICIPANT_LEFT(122421585<9e73d0b5-0525-4e17-9d77-af7a1e42a0e7\1>, xxxxxxxxxx<26147684307333456>)
[12:14:49] – [Verbose] [122421585] =>Adobe : userOffline(4d267465-ebd1-4968-893c-1428e61eaa2b)

In the TelephonyService.log we will see:

[2014-01-24 12:14:49,679] [Thread :: bambooEvents] (DEBUG) rtmp.RTMPConnection – Calling MeetingApp method. methodName: telephonyUserOffline, parameters: {telephony-user-id=4d267465-ebd1-4968-893c-1428e61eaa2b, conference-id=122421585}

 

InterCall

For an Adobe responsible hangup (deliberate):

In the meeting (application.log) log we will see:

2014-01-24 12:41:38 80764 (s)2641173 TelephonyServiceConnector, Calling action: conference-call-out -
2014-01-24 12:41:38 80764 (s)2641173 Asc-Telephony IS_HANG_UP_USER Hangup a user. TS CALL-10 conference-call-out -
2014-01-24 12:41:38 80764 (s)2641173 Asc-Telephony IS_HANG_UP_USER Hangup a user. TS RESP-10 conference-call-out -

In the Intercall_Adaptor.log we will see:

[2014-01-24 12:41:38,208] [FCSj_Worker:11] (DEBUG) Intercall.IntercallConference – FCSj_Worker:11:com.macromedia.breeze_ext.telephony.Intercall.IntercallConference:hangUp:Intercall-1.3:intercall-adaptor:Conference Code: xxxxxxxxx
[2014-01-24 12:41:38,208] [FCSj_Worker:11] (DEBUG) Intercall.IntercallConference – FCSj_Worker:11:com.macromedia.breeze_ext.telephony.Intercall.IntercallConference:hangUp:Intercall-1.3:intercall-adaptor:Conversation Id: xxxxxx.adobeconnect.com_intercall-adaptor_323_-555337
[2014-01-24 12:41:38,208] [FCSj_Worker:11] (DEBUG) Intercall.IntercallConference – FCSj_Worker:11:com.macromedia.breeze_ext.telephony.Intercall.IntercallConference:hangUp:Intercall-1.3:intercall-adaptor:Connect part Id: Jim Johnson_196253313@1-xxx-xxx-xxxx
[2014-01-24 12:41:38,208] [FCSj_Worker:11] (DEBUG) Intercall.IntercallConference – FCSj_Worker:11:com.macromedia.breeze_ext.telephony.Intercall.IntercallConference:hangUp:Intercall-1.3:intercall-adaptor:Intercall part Id: 1
[2014-01-24 12:41:38,208] [FCSj_Worker:11] (DEBUG) Intercall.IntercallConference – FCSj_Worker:11:com.macromedia.breeze_ext.telephony.Intercall.IntercallConference:hangUp:Intercall-1.3:intercall-adaptor:Hanging up user

In the TelephonyService.log we will see:

[2014-01-24 12:41:38,208] [FCSj_Worker:11] (DEBUG) rtmp.RTMPConnection – Calling telephony action on request from MeetingApp. action: conference-call-out, parameters: {telephony-user-id=Jim Johnson_196253313@1-xxx-xxx-xxxx, conference-id=xxxxxx.adobeconnect.com_intercall-adaptor_323_-555337, unset=true, action=conference-call-out, adaptor-id=intercall-adaptor}
[2014-01-24 12:41:38,302] [FCSj_Worker:11] (DEBUG) rtmp.RTMPConnection – Returning telephony action response to MeetingApp. acrion: conference-call-out, response: {code=ok}

For an external hangup (not due to Adobe):

In the meeting (application.log) log we will see:

2014-01-27 11:09:58 99308 (s)2641173 Asc-UserManager IS_SET_USER_PHONE_STATUS set user phone status { userID=2, phoneStatus=0 } -
2014-01-27 11:09:58 99308 (s)2641173 shouldBeKilled p_userID=2 advUserDesc.isNotInLive=true -
2014-01-27 11:09:58 99308 (s)2641173 dispatchEventToClient: p_evtObj.type=userPhoneStatusChanged p_isAdvancedEvent=true -
2014-01-27 11:09:58 99308 (s)2641173 dispatchRPCEventToClient: userId=2 p_evtObj.type=userPhoneStatusChanged -
2014-01-27 11:09:58 99308 (s)2641173 Remove the user 2 -
2014-01-27 11:09:58 99308 (s)2641173 Asc-UserManager IS_REMOVE_USER Removing user. { userID=2, eject=undefined } -

In the Intercall_Adaptor.log we will see:

[2014-01-27 11:09:58,902] [http-bio-9443-exec-6] (DEBUG) Intercall.IntercallEventHandler – http-bio-9443-exec-6:com.macromedia.breeze_ext.telephony.Intercall.IntercallEventHandler:onEvent:Intercall-1.3::Event received:
[2014-01-27 11:09:58,902] [http-bio-9443-exec-6] (DEBUG) Intercall.IntercallEventHandler – http-bio-9443-exec-6:com.macromedia.breeze_ext.telephony.Intercall.IntercallEventHandler:onEvent:Intercall-1.3::Got events for conversation xxxxxx.adobeconnect.com_intercall-adaptor_251_-523503: com.intercall.www.CCAPICallback.xsd.spi.event.ParticipantLeftEvent@ceebb956
[2014-01-27 11:09:58,902] [http-bio-9443-exec-6] (DEBUG) Intercall.IntercallCallback – http-bio-9443-exec-6:com.macromedia.breeze_ext.telephony.Intercall.IntercallCallback:onParticipantLeftEvent:Intercall-1.3:intercall-adaptor:Now handling ParticipantLeftEvent for conversation ID xxxxxx.adobeconnect.com_intercall-adaptor_251_-523503
[2014-01-27 11:09:58,902] [http-bio-9443-exec-6] (DEBUG) Intercall.IntercallConference – http-bio-9443-exec-6:com.macromedia.breeze_ext.telephony.Intercall.IntercallConference:removeParticipant:Intercall-1.3:intercall-adaptor:Conference Code:xxxxxxxx
[2014-01-27 11:09:58,902] [http-bio-9443-exec-6] (DEBUG) Intercall.IntercallConference – http-bio-9443-exec-6:com.macromedia.breeze_ext.telephony.Intercall.IntercallConference:removeParticipant:Intercall-1.3:intercall-adaptor:Conversation Id: xxxxxx.adobeconnect.com_intercall-adaptor_251_-523503
[2014-01-27 11:09:58,902] [http-bio-9443-exec-6] (DEBUG) Intercall.IntercallConference – http-bio-9443-exec-6:com.macromedia.breeze_ext.telephony.Intercall.IntercallConference:removeParticipant:Intercall-1.3:intercall-adaptor:ConnectPartId: 3
[2014-01-27 11:09:58,902] [http-bio-9443-exec-6] (DEBUG) Intercall.IntercallConference – http-bio-9443-exec-6:com.macromedia.breeze_ext.telephony.Intercall.IntercallConference:removeParticipant:Intercall-1.3:intercall-adaptor:Removing this participant

In the TelephonyService.log we will see:

 [2014-01-27 11:09:58,902] [http-bio-9443-exec-6] (DEBUG) rtmp.RTMPConnection  - Calling MeetingApp method. methodName: telephonyUserOffline, parameters: {telephony-user-id=3, conference-id=xxxxxx.adobeconnect.com_intercall-adaptor_251_-523503}

PGI

For an Adobe responsible hangup (deliberate):

In the meeting (application.log) log we will see:

2014-01-27 11:35:33 120876 (s)2641173 Asc-Telephony IS_HANG_UP_USER Hangup a user. TS CALL-10 conference-call-out -
2014-01-27 11:35:33 120876 (s)2641173 Asc-UserManager IS_SET_USER_PHONE_STATUS set user phone status { userID=2, phoneStatus=0 } -

In the Premiere_Adaptor.log we will see:

[2014-01-27 11:35:33,628] [FCSj_Worker:15] (DEBUG) gateway.PTekGateway – PREMIERE TEL v800.000[FCSj_Worker:15]com.macromedia.breeze_ext.premiere.gateway.PTekGateway.hangUp:628:hangUp request received for confId:xxxxxx telephonyUserId:2501-129866748
[2014-01-27 11:35:33,629] [FCSj_Worker:15] (DEBUG) gateway.PTekConnection – PREMIERE TEL v800.000[premiere-adaptor][FCSj_Worker:15]com.macromedia.breeze_ext.premiere.gateway.Util$LoggingOutputStream.flush:162:
<PremiereConferencing ID=”xxxxxx” MsgID=”107″ PW=”xxxxxxxx” WebID=”xxxxxx” WebPW=”xxxxxxxx”>
<HangupParticipant ConfID=”xxxxxx” PartID=”2501-129866748″/>
</PremiereConferencing>
[2014-01-27 11:35:33,913] [Thread-677] (DEBUG) gateway.ConnectionHandler – PREMIERE TEL v800.000[premiere-adaptor][Thread-677]com.macromedia.breeze_ext.premiere.gateway.Util$LoggingOutputStream.flush:162:
<PremiereConferencing>
<UnsolicitedPartInfo>
<Result ErrorCode=”0″/>
<Participant ANI=”xxxxxxxxxx” ConfID=”xxxxxx” Connected=”False” DNIS=”xxxxxxxxxx” EndDate=”20140127″ EndTime=”173533″ Hold=”False” InQA=”False” IsQATalker=”False” ListenLevel=”0″ ListenOnly=”False” Mute=”False” PartID=”2501-129866748″ PartType=”Normal” StartDate=”20140127″ StartTime=”173417″ SubConfID=”” VoiceLevel=”0″/>
</UnsolicitedPartInfo>
</PremiereConferencing>

In the TelephonyService.log we will see:

[2014-01-27 11:35:33,628] [FCSj_Worker:15] (DEBUG) rtmp.RTMPConnection – Calling telephony action on request from MeetingApp. action: conference-call-out, parameters: {telephony-user-id=2501-129866748, conference-id=xxxxxx, unset=true, action=conference-call-out, adaptor-id=premiere-adaptor}
[2014-01-27 11:35:33,913] [Thread-677] (DEBUG) rtmp.RTMPConnection – Calling MeetingApp method. methodName: telephonyUserOffline, parameters: {telephony-user-id=2501-129866748, conference-id=xxxxxx}

For an external hangup (not due to Adobe):

In the meeting (application.log) log we will see:

2014-01-27 11:38:03 120876 (s)2641173 Asc-UserManager IS_SET_USER_PHONE_STATUS set user phone status { userID=3, phoneStatus=0 } -
2014-01-27 11:38:03 120876 (s)2641173 shouldBeKilled p_userID=3 advUserDesc.isNotInLive=true -
2014-01-27 11:38:03 120876 (s)2641173 dispatchEventToClient: p_evtObj.type=userPhoneStatusChanged p_isAdvancedEvent=true -
2014-01-27 11:38:03 120876 (s)2641173 dispatchRPCEventToClient: userId=3 p_evtObj.type=userPhoneStatusChanged -
2014-01-27 11:38:03 120876 (s)2641173 Remove the user 3 -
2014-01-27 11:38:03 120876 (s)2641173 Asc-UserManager IS_REMOVE_USER Removing user. { userID=3, eject=undefined } -

In the Premiere_Adaptor.log we will see:

<Participant ANI=”xxxxxxxxxx” ConfID=”xxxxxxx” Connected=”False” DNIS=”xxxxxxxxxx” EndDate=”20140127″ EndTime=”173803″ Hold=”False” InQA=”False” IsQATalker=”False” ListenLevel=”0″ ListenOnly=”False” Mute=”False” PartID=”2501-130152300″ PartType=”Normal” StartDate=”20140127″ StartTime=”173634″ SubConfID=”” VoiceLevel=”0″/>
</UnsolicitedPartInfo>
</PremiereConferencing>
[2014-01-27 11:38:04,019] [Thread-677] (INFO ) gateway.ConnectionHandler  - PREMIERE TEL v800.000[premiere-adaptor][Thread-677]com.macromedia.breeze_ext.premiere.gateway.ConnectionHandler.onUnsolicitedPartInfoMsg:337:Got error code: 0

In the TelephonyService.log we will see:

 [2014-01-27 11:38:04,019] [Thread-677] (DEBUG) rtmp.RTMPConnection  - Calling MeetingApp method. methodName: telephonyUserOffline, parameters: {telephony-user-id=2501-130152300, conference-id=4040116}

 

LDAP Sync Log File Access

Scenario: You may be an Adobe Connect Administrator and want to access the LDAP sync logs to see who has been (via an LDAP sync) brought into Adobe Connect, removed from Adobe Connect, or has been added or removed from a group membership, and when.  The problem is that these logs are only accessible for the most part, on the server itself by a server admin who can log into the Configuration Console on the localhost and access them manually via the Directory Service area of the console.  This is not accessible from outside of the actual Connect server.

The solution is to use the API to find all the LDAP sync logs on the system (which are actually treated as content) and access them with just an Administrator username and password to the system.  Here’s how:

1) Log into the Adobe Connect interface as user with Administrator priviledges.
2) Assuming your Licensed account-id has not been changed, it will be ’7′ so you can make the following API call:

http://{serverURL}/api/xml?action=sco-expanded-contents&sco-id=7&filter-icon=logos

Where 7 is the account ID and you filter on ‘icon=logos’ (not sure why)…

Result will look like this (example response):

<results>
<status code=”ok”/>
<expanded-scos>
<sco depth=”2″ sco-id=”12345” folder-id=”11005″ type=”content” icon=”logos” lang=”en” source-sco-id=”” display-seq=”0″ source-sco-type=”” source-sco-icon=”” content-source-sco-icon=”” duration=””>
<name>{ds-sync}</name>
<url-path>/p5u78ftvvsi/</url-path>
<date-created>2013-10-29T20:10:17.660-04:00</date-created>
<date-modified>2014-01-14T21:42:27.150-05:00</date-modified>
</sco>
</expanded-scos>
</results>

The name of the item should be {ds-sync} (short for Directory Service Synchronization).

3) Then use the following call to get all sync logs under that folder:

http://{serverURL}/api/xml?action=sco-expanded-contents&sco-id=12345

Where the sco-id is the one from the first call and will be the sco-id of the sync folder (so yours will be different than my example of 12345)

It will list all sync logs with their scos (like below).

They all have a name format of: {sync-sco-preview} + the date.
They all have an icon=archive

4) Look for the one you want, and then navigate to the file via the URL (value in RED in the response below).

Example response:

<results>
<status code=”ok”/>
<expanded-scos>
<sco depth=”0″ sco-id=”12345″ folder-id=”11005″ type=”content” icon=”logos” lang=”en” source-sco-id=”” display-seq=”0″ source-sco-type=”” source-sco-icon=”” content-source-sco-icon=”” duration=””>
<name>{ds-sync}</name>
<url-path>/p5u78ftvvsi/</url-path>
<date-created>2013-10-29T20:10:17.660-04:00</date-created>
<date-modified>2014-01-14T21:42:27.150-05:00</date-modified>
</sco>
<sco depth=”1″ sco-id=”26150″ folder-id=”12345″ type=”content” icon=”archive” lang=”en” source-sco-id=”” display-seq=”0″ source-sco-type=”” source-sco-icon=”” content-source-sco-icon=”” duration=””>
<name>{sync-sco-preview} [2014-01-14 18:23:35.47]</name>
<url-path>/p26150/</url-path>
<date-created>2014-01-14T21:23:35.470-05:00</date-created>
<date-modified>2014-01-14T21:23:35.470-05:00</date-modified>
</sco>
<sco depth=”1″ sco-id=”26017″ folder-id=”12345″ type=”content” icon=”archive” lang=”en” source-sco-id=”” display-seq=”0″ source-sco-type=”” source-sco-icon=”” content-source-sco-icon=”” duration=””>
<name>{sync-sco-preview} [2014-01-14 06:37:23.88]</name>
<url-path>/p26017/</url-path>
<date-created>2014-01-14T09:37:23.880-05:00</date-created>
<date-modified>2014-01-14T09:37:23.880-05:00</date-modified>
</sco>
…….
</expanded-scos>
</results>

 

A Simple Way to Relocate Connect Folders

For On-Premise Installations Only

If you have installed Connect with the default configuration, it is possible that you installed with the default configuration where all Connect folders are on C:

However, if you later want to move some (or all) of the Connect folders to a different drive, then you run into the issue of having to find all of the configuration locations in custom.ini and in the database that reference the folder locations, and this could be difficult to manage.

An alternate option is to use the NTFS symbolic link feature. This way, you would move the folders, then create symbolic links in the old locations, and you would not need to modify the Connect configuration in any way. A side benefit of this method is that if you are running in a clustered environment, you can update each server one at a time without having to take the entire cluster down.

To create a link, you would use the mklink command in a command window.

Let’s say, for instance, that you have installed a new hard drive as D: and want to move the content and logs folders from C: to D:, here’s one way you might perform this task.

  1.  Shut down the Connect service
  2. Create d:\breeze folder
  3. Move the c:\breeze\content and c:\breeze\logs folders to d:\breeze
  4. Open a command prompt window and run these two commands:
    mklink /d c:\breeze\content d:\breeze\content
    mklink /d c:\breeze\logs d:\breeze\logs
  5. Restart the Connect services

As with any system modification, it is always advisable to run these changes in a staging environment first before implementing in your production environment.

If you want to move the folders back to their original locations, you can follow these steps:

  1. Shut down the Connect services
  2. Open a command prompt window and run these two commands:
    rmdir c:\breeze\content
    rmdir c:\breeze\logs
  3. Move the d:\breeze\content and d:\breeze\logs folders to c:\breeze
  4. Delete the d:\breeze folder
  5. Restart the Connect services

Using iframe to Invoke an Adobe Connect-hosted URL

Make sure that the iframe reference is formatted correctly.

When referencing an a meeting archive recording, it is best to first move an archive from under its parent meeting to the Connect Central content library before referring to it via iframe.

Do not let the URL of the archive recording redirect to Connect Central login page. To bypass the login screen you may either parse a username and password as a parameter in the URL or you may set permissions on the referenced content URL in Connect Central to allow for public viewing.  The latter option is usually the best. To avoid exposing the genuine user’s password as plain text in a GET request, it is usually best to simply make the recording public in Connect Central then link it. Alternatively, you may also create a new user in Connect Central with no other permissions except access to the referenced URL.

Referencing content in Connect Central that is set to public viewing:

<iframe src=http://connectdomainname.adobeconnect.com/customurl1″></iframe>

Referencing content by parsing a username and password:

<iframe src=”http://connectdomainname.adobeconnect.com/username?login=username@adobe.com&password=userpassword&account-id=12345678” width=”600″ height=”600″></iframe>

When referring to multiple URLs whether archives or MP4s or other Connect-hosted links, be sure to use a separate iframe reference for each Conenct URL rather than attempting to wrap all URLs in a single iframe reference. For example, two public links together in a table might look like this:

  <tr>
    <td width=”600″><iframe src=”http://connectdomainname.adobeconnect.com/customurl1″></iframe></td>
  </tr>
  <tr>
    <td><iframe src=”http://connectdomainname.adobeconnect.com/customurl2″></iframe></td>
  </tr>

Configuring Adobe Connect to take Advantage of Database Mirroring

Full redundancy requires that the Connect database be either mirrored or clustered; Adobe uses mirroring as the preferred solution.

The following example settings in the custom.ini file are needed to configure Connect to take advantage of SQL Mirroring:

DB_NAME=ConnectDBName

DB_HOST=ConnectDBPrimaryHostName

DB_BACKUP_HOST=ConnectDBSecondaryHostName

DB_URL=jdbc:macromedia:sqlserver://{DB_HOST}:{DB_PORT};databaseName={DB_NAME};user={DB_USER};password={DB_PASSWORD};AlternateServers=({DB_BACKUP_HOST}:{DB_PORT};DatabaseName={DB_NAME});ConnectionRetryCount=12;ConnectionRetryDelay=10;FailoverMode=extended;FailoverPreconnect=false;FailoverGranularity=atomic

Note: Change the first three variables as appropriate, but do not make any changes to the DB_URL.  It is all one line and it pulls the values from the other three entries in custom.ini:

The follwoing setting is always pudent whether using mirroring or clustering, but it is particularly important if you are clustering SQL. If you are running the Connect SQL database in a SQL cluster rather than in a mirrored environment, you will want to make sure that Connect makes multiple database connection attempts during SQL fail-over. If Connect loses its SQL database, the entire Connect cluster will go down and it will wait for an administrator to manually reconnect to the database through launching the Connect configuration console on port 8510. Add the following to the custom.ini file to support any delays in clustered SQL fail-over:

DB_URL_CONNECTION_RETRY_COUNT = 15
DB_URL_CONNECTION_RETRY_DELAY= 30

The actual JDBC string That invokes these variables is in the config.ini file:

DB_URL=jdbc:macromedia:sqlserver://{DB_HOST}:{DB_PORT};databaseName={DB_NAME};user={DB_USER};password={DB_PASSWORD};ConnectionRetryCount={DB_URL_CONNECTION_RETRY_COUNT};ConnectionRetryDelay={DB_URL_CONNECTION_RETRY_DELAY}

Save the custom.ini and cycle the services.

 

 

Connect 9.1.2b on-premise – PDF conversion may fail

When uploading a PDF to a share pod in a meeting on an on-premise server version 9.1.2b on some installations the file cannot be converted.

In the access.log you get a message like this:

“Internal error ‘Pdf to swf conversion failed with return code -1073741515′ occured”

If you run into this problem please verify that you have the “Microsoft Visual C++ 2010 Redistributable Package (x86)” installed on your server.

If it is not installed, install it from here: http://www.microsoft.com/en-us/download/details.aspx?id=5555

Make sure to install the 32bit version even if you have a 64bit OS.

If the file still does not convert after successful upload to a meeting, please contact support.

XML API Tips: Obtaining Quotas for Seminar Licenses

A while back I blogged about how to create a Seminar Session via the XML API in Adobe Connect 9.1 (view original blog here).  A question has since come up around how to obtain the quota for a Seminar License, so you know what to put in for the seminar-expected-load value in the acl-field-update call in the last step of that article.

You can obtain the Seminar License quotas for your different licenses by running this API call:

https://{myConnectURL}/api/xml?action=sco-seminar-licenses-list&sco-id=XXXXXXX

where sco-id = the sco-id of the SHARED SEMINARS folder (or the ‘seminars’ tree-id of the shortcut ‘seminars’).

Example Result (showing an example where there are 2 Licenses):

<results>
<status code=”ok”/>
<seminar-licenses>
<sco>
<begindate>2011-12-02T01:00:01.000+00:00</begindate>
<date-begin>2011-12-01T20:00:01.000-05:00</date-begin>
<date-created>2011-12-02T23:47:02.353-05:00</date-created>
<date-end>2016-12-01T19:59:59.000-05:00</date-end>
<date-modified>2013-11-29T10:53:56.590-05:00</date-modified>
<display-seq>0</display-seq>
<duration>XXXXXXXX</duration>
<enddate>2016-12-02T00:59:59.000+00:00</enddate>
<folder-id>XXXXXXXX</folder-id>
<icon>folder</icon>
<is-expired>false</is-expired>
<is-folder>1</is-folder>
<is-seminar>false</is-seminar>
<name>My Seminar License 1</name>
<quota>1000</quota>
<sco-id>XXXXXXXX</sco-id>
<type>folder</type>
<url-path>/fXXXXXXXX/</url-path>
</sco>
<sco>
<begindate>2011-12-02T01:00:01.000+00:00</begindate>
<date-begin>2011-12-01T20:00:01.000-05:00</date-begin>
<date-created>2011-12-02T23:47:04.490-05:00</date-created>
<date-end>2016-12-01T19:59:59.000-05:00</date-end>
<date-modified>2013-11-29T10:54:04.010-05:00</date-modified>
<display-seq>0</display-seq>
<duration>XXXXXXXX</duration>
<enddate>2016-12-02T00:59:59.000+00:00</enddate>
<folder-id>XXXXXXXX</folder-id>
<icon>folder</icon>
<is-expired>false</is-expired>
<is-folder>1</is-folder>
<is-seminar>false</is-seminar>
<name>My Seminar License 2</name>
<quota>1500</quota>
<sco-id>XXXXXXXX</sco-id>
<type>folder</type>
<url-path>/XXXXXXXX/</url-path>
</sco>
</seminar-licenses>
</results>

Again, there are multiple ways of getting the id of the main Seminars folder.  One quick one is :

https://{myConnectURL}/api/xml?action=sco-shortcuts

and pull the value from either in blue (the will both be the same):

<sco tree-id=”XXXXXXX” sco-id=”XXXXXXX” type=”seminars”>
<domain-name>http://{myConnectURL}</domain-name>
</sco>

Another is:

https://{myConnectURL}/api/xml?action=sco-expanded-contents&sco-id=XXXXXXXX&filter-type=tree

where the sco-id is = the account-id

and pull the value in blue:

<sco depth=”1″ sco-id=”XXXXXXX” folder-id=”XXXXXX” type=”tree” icon=”folder” lang=”en” source-sco-id=”” display-seq=”0″ source-sco-type=”” source-sco-icon=”” content-source-sco-icon=”” duration=””>
<name>Shared Seminars</name>
<url-path>/XXXXXXX/</url-path>
<date-created>2011-12-02T23:46:53.563-05:00</date-created>
<date-modified>2013-11-29T10:54:03.053-05:00</date-modified>
</sco>

Event Template Account Logo will not Publish

Issue: The Connect Events template account logo in AEM does not change when you attempt publish a new template logo

Solution: To change the account logo on Event templates, you need to change the account logo of the Connect account from within Connect Central:

Click on the the thumbnail image to see the Customization page in Connect Central: Administration > Customization > Customize Central

Event-logo-CC.fw

 

For more information on Connect Central customization options see the following help link: Customize the Adobe Connect Central user interface

For more customization options see the following resource: Extensions : Solution extensions

For more information on Events Templates see the following tutorials:

Creating and Editing Event Templates

Resetting the Default Event Templates in Adobe Connect

Creating a Two Person Event Template with Adobe Connect

Event Administration in Adobe Connect 9

Adobe Connect 9: Event Migration Guide