def StepMain(Framework):
    consumers = Framework.getProperty(DependenciesDiscoveryConsts.NEXT_HOP_PROVIDERS_RESULT_PROPERTY)
    OSHVResult = ObjectStateHolderVector()
    if (consumers is not None) and (consumers.size() > 0):
        ipPortconcepts = HashMap()

        localShell = None
        try:
            dnsServers = Framework.getParameter('dnsServers') or None

            if dnsServers:
                dnsServers = [dnsServer for dnsServer in dnsServers.split(',') if dnsServer and dnsServer.strip()] or None

            localShell = shellutils.ShellUtils(Framework.createClient(ClientsConsts.LOCAL_SHELL_PROTOCOL_NAME))

            #going through extracted consumers
            for i in range(0, consumers.size()):
                consumer = consumers.get(i)
                depedencies = consumer.getDependencies()
                #going through dependencies of consumer
                for depedency in depedencies:
                    variables = depedency.getExportVariables()
                    #going through extracted variables of dependency
                    for variable in variables:
                        variableName = variable.getName()
                        values = variable.getValues()
                        conceptDefinition = variableName.split('.')
                        if (len(conceptDefinition) == 2) and len(conceptDefinition[0]) and ((conceptDefinition[1].upper() == PROVIDER_IP) or (conceptDefinition[1].upper() == PROVIDER_PORT)):
                            processIpPortConcept(ipPortconcepts, conceptDefinition[0].upper(), conceptDefinition[1].upper(), values)
                        elif variableName.upper() == PROVIDER_IP:
                            processIps(Framework, OSHVResult, values, localShell, dnsServers)

            resolveIpFromDnsPortipPortconcepts(Framework, OSHVResult, ipPortconcepts, localShell, dnsServers)
            Framework.sendObjects(OSHVResult)
            Framework.flushObjects()
        except:
            Framework.reportError(logger.prepareJythonStackTrace(''))
            Framework.setStepExecutionStatus(WorkflowStepStatus.FATAL_FAILURE)

        if localShell is not None:
            try:
                localShell.close()
                localShell = None
            except:
                pass
    Framework.getState().setProperty(DependenciesDiscoveryConsts.NEXT_HOP_PROVIDERS_RESULT_PROPERTY, not OSHVResult.isEmpty())
    Framework.setStepExecutionStatus(WorkflowStepStatus.SUCCESS)