Product: Corepoint Telephony Skills-Based Routing Version: 6.2.0 Level: E2016 Platform: OS/2 Date: 16 May 2001 Service File: skbos2.exe Size: 1108736 (1.1Mb) Installation Instructions: -------------------------- Download the self-extracting file, skbos2.exe, into a temporary directory. Execute it from the command line and follow the prompts. If you answered "Yes" to the backup query and wish to undo the service update, issue the following commands: : cd \ -Qdr where is the drive letter on which product is installed and is the full path name of the backup self-extracting file. Fixes contained in this Service Package: ---------------------------------------- Name: APAR IC30165 Library: 9371 Symptom: During normal operation the agent attempt to logon results in a trap. Solution: The code is corrected to set memory based on max size of agent id and to copy into that area, avoiding an access exception. Name: APAR IC29420 Library: 9127 Symptom: After installation of service on AIX, the softlink may still point to a different executable rather than the one that was just updated. Solution: The fixpack installation program is updated to update the softlink to point to the executable that was updated. Name: APAR IC29492 Library: 9172 Symptom: The SKBR hangs because agentList lock is not released after INI re-read. Solution: The implementation of masterlock needed correction to locking scheme when agent is no longer valid. SetStatus for logoff will only obtain locks if not AGENT_DELETE. Name: APAR IC29238 Library: 9090 Symptom: The estimated wait time appears to be too high after it has been running for a while. Solution: The update of the average process time will not round up when being recalculated. The resulting value would created a higher number when multiplied by the number of calls queued. Name: APAR IC29020 Library: 9050 Symptom: The boost priority thread was running when the calls were being dequeued. This resulted in an error condition when the call to be removed was not found on the expression list of calls. Further execution could result in a trap. Solution: The boost priority thread will obtain the expression lock sooner to prevent the call removal function from interacting with the boost priority thread. The call removal function will do more of its processing while the expression is locked and while the callslist is locked. Also, correct the processing of removing handles for agents that are logging off. Remove all handles for that agent versus one handle. Also defect 9128 Name: APAR IC28841 Library: 9007 Symptom: Agent logon/logoff activity during heavy load allowed the agent to be left on a qualified agent queue even tho the agent was logged off. Under the os/2 environment this resulted in a trap. Solution: Corrected the ProcessACDLogoff function to designate that the agent was logging off so that attempts to place the agent on the qualified agent queue would fail. Other changes to avoid timing problems in case of application dropping. Name: APAR IC28494 Library: 8967 Symptom: TadsRequestACDAction for TADS_ACD_AVAIL_IMPLICITLY or TADS_ACD_AVAIL_EXPLICITLY are eaten by SKBR and not passed on to CP Interface deamon. Solution: Corrected TadsRequestACDAction function to evaluate for all valid cases and to return TADS_NOT_SUPPORTED for cases that SKBR does not handle so that Server can pass request on to other deamons. The TADS_ACD_AVAIL_IMPLICITLY and TADS_ACD_AVAIL_EXPLICITLY are two cases not handled by SKBR. Name: APAR IC28248 Library: 8930 Symptom: Rc 561 returned for SetAgentPreferences. The function determined that the skill at the end of the allowable buffer size was incorrect because it was truncated. Solution: Function now puts a diag into the SKBRERR file that will denote the skill in question and alert the user to examine the buffer size. Name: APAR IY12778 Library: 8913 Symptom: Rc 510 returned for Skills Based functions due to deadlock. Solution: The logging off of agents due to DisconnectFromServer will utilize the same code as is used when an agent requests a logoff. This handles the locks better and prevents the deadlock with the setting of monitors. Name: APAR IC27657 Library: 8869 Symptom: Invalid estimated wait time when agents are logging off. Solution: The calculation of the estimated wait time will prevent 0 value when there are calls in the queue and the number of agents logged on is changing. A residual high value should also be eliminated by this fix. Name: APAR IC27620 Library: 8862 Symptom: Unable to access working agent list as logoff of agent occurs. Solution: The dropApps function will now call the ProcessACDLogoff function that handles locks better and should prevent the lock problem from occurring. Name: APAR IC27561 Library: 8739 Symptom: Invalid QueueSize value returned for monitored TADS_ACD_STATUS_EVENT. Solution: Correct the Skill Expression copy constructor in tadsskbr.hpp to copy the iCallsInQueue value so that the GenerateACDAgentDetails function will obtain the correct queue size value. Name: APAR IC27071 Symptom: The MaxPendingTime was very large. Solution: The MaxPendingTime will be noted in the skberr log when the value is larger than 100 seconds. The Configurator will not allow a MaxPendingTime larger than 500. Name: APAR IY10710 Symptom: Invalid data returned from QueryPotentialCalls request. Solution: Correct the pointer increment to point to the correct data when assembling the data to be returned. Name: APAR IC26625 Symptom: Agent logoff during calls being enqueued causes lock wait situation. Solution: The agent logoff process is changed to attempt to get needed locks, and if during that process it cannot get a lock, it releases all locks gotten and starts the lock acquisition again. Logoff process will timeout sooner when waiting for a lock, thereby not causing other waiting processes to wait as long. This puts logoff processing at a lower priority than other processes. Name: APAR IY07138 Symptom: A call is queued instead of being given to the available agent. Solution: The available agent count was being decremented in AgentDelta function even when the agent was not currently available. This made the count be 1 too few and would result in an agent waiting, not being given a call that came in. Name: APAR IC25746 Symptom: If an Agent is removed from the INI file and TadsReadINI() is called while the agent is Logged on and monitored by an application the code could trap attempting to clean up the Agent resources. Solution: A pointer to unlock a semaphore related to the Queue that was created on the monitor of the Agent was being accessed after the Queue had been deleted. Change code to properly clean up the Queue. Name: APAR IC25739 Symptom: When several applications perform TadsQueryACDStatus() calls to the same resource the Skills Based Routing daemon could trap intermittantly. Solution: Change the method used to determine if the query is for a Skills expression or not. This eliminated calling the offending method in the Collection class. Name: APAR IY05210 Symptom: The estimated wait time was based on the queue time of the longest waiting call. Problem: Coding error Workaround: None Solution: Add function to calculate and retain the average processing time. Use it and the number of calls queued to calculate the estimated wait time. Note that before any calls have been processed, the calculated wait time will return a minimum value. As calls are processed, the wait time value will become valid. Name: APAR IY04436 Symptom: When an Agent wishes to SetAgentPreferences() to specify only a a subset of his skills resume, the agent was not being removed from the skills expressions that he did not specify in the SetAgentPreferences API. Problem: Coding error Workaround: None Solution: Change to the SetAgentPreferences() API process to remove the AgentID from the skills queues that are no longer desired by the agent. Name: APAR IC24678 Symptom: When Agent resumes are changed to delete/add agent skills to an Agent's resume who is actively processing calls in the system, SKBR could trap. Problem: Design Error Workaround: None Solution: Change to the ReadINI() processing so that only the agent's delta is changed in QualifiedAgentList instead of doing a remove/add. The remove add was creating a corrupted agent in the List. Name: APAR IC24537 Symptom: When Dialer is performing multiple POWER dial calls per agent, it is possible to have 2 calls transfered to the same agent at the same time, resulting in a transfer failure on 1 of the calls. Problem: Design Error Workaround: None Solution: Add error checking to GeneratePotentialCallEvent code to check that the agent object is valid prior to accessing it. Name: APAR IC24537 Symptom: When an application issues an TadsQueryACDStatus or receives a TadsACDStatusEvent the Available agent count could be incorrect as to how many agents are actual in the available state for that queue. Problem: Code Error Workaround: None Solution: Changes to the code so that the incrementing and decrementing the count of available agents remains accurate. Name: APAR IC24203 Symptom: If agent that is actively servicing calls attempts to call TadsRequestACDAction(AGENT_LOGOFF) the SKBR/Dialer daemon traps as 1 thread would remove the agent while other threads were still accessing it. Problem: Design Error Workaround: Have the Agent Application make the agent UNAVAILABLE before issuing LOGOFF. Solution: Ensure that the agent list is locked correctly in the code so that multiple threads are not accessing the same agent at the same time. Name: APAR IC24204 Symptom: Under heavy load it is possible to have the SKBR/Dialer Daemon enter a deadlock state as multiple threads access the same semaphores at the same time. Problem Design Error Workaround: None Solution: Code change to clean up semaphore locking problems. Name: APAR IC24207 Symptom: If the csebprof.ini is modified to delete an actively working agent, and TadsReadINI() is then called the system traps. Problem: Design Error Workaround: Only issue TadsReadINI() on a quiesced system. Solution: Clean up the TadsReadINI() code to ensure that agent objects are not deleted out from under other threads. Name: Defect 8396 Symptom: The Server name that SKBR held in uppercase did not match the Server's kept value. Solution: The retention of the server will be in lowercase and all comparisons will occur with same case. Name: Defect 8253 Symptom: The skill expression being monitored had available agent number one greater than logged on. Solution: The GenerateACDAgentDetailsEvent use the skillsexpression's available count rather than doing a local calculation. Name: Defect 8208 Symptom: OTHER was in INI file because Predictive Dialer was configured (not installed). Solution: In ValidateINIFile, upper case the token and the words OTHER and PREDICTIVE. This allows the comparison to work correctly. Name: Defect 8205 Symptom: Agent status moves to Available state due to quick timeout. Solution: Minimum value for MaxPendingTime state is now 10 seconds. This will give the agent enough time to trigger ACD_Call state when a call is received before a timeout that would change the state of the agent to the PendingInboundTimeoutState value. Name: Defect 8133 Symptom: All calls to TadsRequestACDAction() api fail RC=510 (Tads_Internal_Error). Problem: Original design. Workaround: Do not issue TadsRequestACDAction(WORK_NOT_READY) with an invalid DN for the SKBR agent. Solution: Found in the case of the RequestACDAction(WORK_NOT_READY) if the telephone number provided in the API is not the same as what the agent logged on with the code would return without unlocking the appropriate semaphore. This causes all api calls that needed access to the list to fail for RC=510. Change the code to unlock the semaphore in this particular case. Name: Defect 8125 Symptom: When there are more than 395 calls queued, a TadsModQueryACDStatus call abends. Detail: In TadsModQueryACDStatus, determine if more than buffer maximum is needed. If so, return a 585 return code and supply the header only. Name: Defect 8105 Symptom: The agents skills list was being evaluated for a second time when the agent's skills had been updated. Problem: Original design. Workaround: None Solution: In VerifySkillsExpressionQueues, remove the extraneous traversal of the agents skills list. Only need to remove the expression from the expression list. Name: Defect 7575 Symptom: When an agent times out in TADS_PENDING_INBOUND state the agent should transistion to the configured state in the INI file without receiving additional calls. This was not happening correctly. Problem: Code Error Workaround: None Solution: Changes to the code to ensure the agent transistions to the configured state correctly. Name: PMR 25103 Symptom: When an agent's resume is changed to add an active skill and the TadsReadINI() api is called, the agent (in available state) is associated with the skill queues that contain that skill. If the agent is selected for a call upon being associated with the queue, no TADS_ENQUEUE_RESPONSE_EVENT was delivered to the enqueuing application. Problem: Design Problem. Workaround: None Solution: Generate an TADS_ENQUEUE_RESPONSE upon selection of the agent from the new association with that skill queue. Name: Defect 8089 Symptom: Want the ability to have an agent logged off if he times out. Problem: Function limitation. Workaround: None Solution: In tmskinit.cpp, function ReadINIInboundValues, evaluate for "LOGOFF" string in PendingInboundTimeoutState in CSEBPROF.INI file. Set the global ini value to TADS_ACD_STATE_LOGGED_OFF so that in case agent times out a logoff will be initiated. Name: Defect 6934 Symptom: Unable to easily retrieve the Queue Time and the Estimated wait time for a queue when doing TadsQueryPotentialCalls. Problem: Function limitation. Workaround: None Solution: In CSEBPROF.INI in TADSSKBR section the system admin can specify the field "ExtendedPotentialCallData" with a value of 1. This will be interrogated by the TadsQueryPotentialCalls function, which will build a series of DBTADS_QUEUE_HDR_EXTENDED structures instead of a series of DBTADS_QUEUE_HDR structures. The new structure will have the ulQueueTime and ulEstWaitTime fields in it. The application can interrogate these field values upon return from the TadsQueryPotentialCalls function call. Name: Defect 8031 Symptom: When a skill is added to an Agent's resume in the INI file and TadsReadINI() is called, the agent is placed as qualified to handles calls from all queues that contain the added skill. However, if the Agent was in available state and calls are queued for the new skill, the agent was not selected to handle a call. Problem: Code Error. Workaround: Have agent logoff, then back on to the system. Solution: Change the TadsReadINI() processing to find a call for the agent if the agent is in available state and calls exist on the queue. Name: Defect 8031 Symptom: When an Agent Skill,LEVEL combination is removed from the INI file and TadsReadINI() is called the agent is only removed from the specific Skill,LEVEL queue. The Agent remains in other Skill,LEVEL queues in which he previously was qualified for. Problem: Code Error Workaround: Have agent logoff, then back on to the system. Solution: Change the TadsReadINI() processing to remove the agent from all associated skill queues that contain the removed skill. Name: Defect 8016 Symptom: If multiple calls are in queue and an agent remains in the PENDING_INBOUND state until timeout, the agent was not being issued another call upon becoming AVAILABLE after the timeout. Problem: Code Error Workaround: Have agent logoff, then back on to the system. Solution: Change the pending timeout processing to call find call for the agent if the PendingInboundTimeoutState parameter in the INI file is set to AVAILABLE. Files contained in this Service Package: ---------------------------------------- csesskbr.txt bin\csesskbr.exe