def __callRest(self, resultPath, fileName, fileContent, callId=None):
        """
<<<<<<< HEAD
<<<<<<< HEAD
        Internal function 
        XMLRPC call
        """
        self.trace("upload data through xml rpc")
        # prepare the xml body
        call_string = xmlrpclib.dumps( (self.login, self.password, xmlrpcData, True ), xmlrpcFunc )
        
        # prepare the headers
        headers = { 
                    "Host": "%s" % self.controllerIp,
                    "User-Agent": "%s" % Settings.get('Common', 'acronym' ),
                    "Connexion": "Keep-Alive",
                    "Content-Type": "text/xml",
                    "Content-Length": "%s" % len(call_string)
                 }

        # prepare the ip and port
        httpsMode = Settings.getBool( 'Server', 'xmlrpc-https' )
        dstPort = self.controllerPort # Fix issue to upload file with a different tcp port than the default tcp/443
    def __init__(self,
                 controllerIp,
                 controllerPort,
                 toolName,
                 toolDesc,
                 defaultTool,
                 supportProxy=False,
                 proxyIp=None,
                 proxyPort=None,
                 sslSupport=True,
                 toolType=NetLayerLib.TYPE_AGENT_AGENT,
                 fromCmd=False,
                 name=None):
        """
        Constructor for tool

        @param version:
        @type version: string
        """
        self.__LAST_ERROR = None
        self.defaultTool = defaultTool
        self.login = "******"
        self.password = "******"
        self.toolType = toolType
        self.fromCmd = fromCmd

        # init ssl
        self.sslSupportFinal = sslSupport
        if not Settings.getBool('Server', 'ssl-support'):
            self.sslSupportFinal = False

        # init websocket
        wsSupport = False
        if Settings.getBool('Server', 'websocket-support'): wsSupport = True

        NetLayerLib.ClientAgent.__init__(
            self,
            typeAgent=toolType,
            startAuto=True,
            keepAliveInterval=Settings.getInt('Network', 'keepalive-interval'),
            inactivityTimeout=Settings.getInt('Network', 'inactivity-timeout'),
            timeoutTcpConnect=Settings.getInt('Network',
                                              'tcp-connect-timeout'),
            responseTimeout=Settings.getInt('Network', 'response-timeout'),
            selectTimeout=Settings.get('Network', 'select-timeout'),
            sslSupport=self.sslSupportFinal,
            wsSupport=wsSupport,
            pickleVer=Settings.getInt('Network', 'pickle-version'),
            tcpKeepAlive=Settings.getBool('Network', 'tcp-keepalive'),
            tcpKeepIdle=Settings.getInt('Network', 'tcp-keepidle'),
            tcpKeepCnt=Settings.getInt('Network', 'tcp-keepcnt'),
            tcpKeepIntvl=Settings.getInt('Network', 'tcp-keepintvl'))
        serverPort = Settings.getInt('Server', 'port')
        if controllerPort is not None:
            serverPort = int(controllerPort)

        self.setServerAddress(ip=controllerIp, port=serverPort)
        if supportProxy:
            self.setProxyAddress(ip=proxyIp, port=int(proxyPort))
        self.setAgentName(name=toolName)
        toolMore = {'details': toolDesc, 'default': defaultTool}
        if name is not None:
            self.setDetails(name=name,
                            desc=toolMore,
                            ver=Settings.getVersion())
        else:
            self.setDetails(name=self.__class__.__name__,
                            desc=toolMore,
                            ver=Settings.getVersion())

        self.controllerIp = controllerIp
        self.controllerPort = serverPort

        self.pathTraces = Settings.get('Paths', 'tmp')
        self.toolName = toolName
        self.__mutex__ = threading.RLock()
        self.regThread = None
        self.__REGISTERED_BEFORE__ = False
        self.regRequest = None

        if sys.platform == "win32":
            self.__tmpPath__ = "%s\\%s\\[%s]_%s\\" % (Settings.getDirExec(),
                                                      self.pathTraces,
                                                      toolType, self.toolName)
        else:
            self.__tmpPath__ = "%s/%s/[%s]_%s/" % (Settings.getDirExec(),
                                                   self.pathTraces, toolType,
                                                   self.toolName)
        self.__callId__ = 0
        self.__callIds__ = {}
        self.__args__ = []

        # new in v6.2
        self.testsContext = {}
    def __callXmlrpcFile(self, xmlrpcFunc, pathZip, xmlrpcData={}):
        """
        Internal function to make a xmlrpc call
        """
        # adding the file to the request
        try:
            fd = open(pathZip, 'rb')
            xmlrpcData['file-data'] = xmlrpclib.Binary(fd.read())
            fd.close()
        except Exception:
            self.error("unable to pack file data in xmlrpc: %s" % e)
        
        else:
            # prepare the xml body
            call_string = xmlrpclib.dumps( (self.login, self.password, xmlrpcData, True ), xmlrpcFunc )

            # prepare the headers
            headers = { 
                        "Host": "%s" % self.controllerIp,
                        "User-Agent": "%s" % Settings.get('Common', 'acronym' ),
                        "Connexion": "Keep-Alive",
                        "Content-Type": "text/xml",
                        "Content-Length": "%s" % len(call_string)
                     }

            # prepare the ip and port
            httpsMode = Settings.getBool( 'Server', 'xmlrpc-https' )
            dstPort = self.controllerPort # Fix issue to upload file with a different tcp port than the default tcp/443
        
            # set proxy is activated
            if eval( Settings.get( 'Server', 'proxy-active' ) ):
                proxyAddr = Settings.get( 'Server', 'addr-proxy-http' )
                proxyPort = Settings.get( 'Server', 'port-proxy-http' )
                self.trace("Proxy activated for xmlrpc Ip=%s Port=%s" % (proxyAddr, proxyPort) )
            
            if self.defaultTool: 
                httpsMode = False
                dstPort = Settings.get( 'Server', 'default-xmlrpc-port' )

            if httpsMode:
                if eval( Settings.get( 'Server', 'proxy-active' ) ):
                    conn = httpclient.HTTPSConnection(proxyAddr, proxyPort, context=ssl._create_unverified_context())
                else:
                    conn = httpclient.HTTPSConnection(self.controllerIp, dstPort, context=ssl._create_unverified_context())
            else:
                if eval( Settings.get( 'Server', 'proxy-active' ) ):
                    conn = httpclient.HTTPConnection(proxyAddr, proxyPort)
                else:
                    conn = httpclient.HTTPConnection(self.controllerIp, dstPort)

            # set proxy is activated
            if eval( Settings.get( 'Server', 'proxy-active' ) ):
                conn.set_tunnel(host=self.controllerIp, port=int(dstPort) ) # fix bad usage of the proxy
            
            uri = Settings.get( 'Server', 'xmlrpc-path' )
            conn.request("POST", uri, call_string, headers)
            
            response = conn.getresponse()
            if response.status != 200: 
                self.error( 'Upload failed: %s' % response.status )
                self.onUploadErrorFile(callId=xmlrpcData['call-id'])
            else:
                self.trace( 'Http response OK' )
                data = response.read()

                # decode xml rsp
                try:
                    if sys.version_info > (3,):
                        xml_rsp = xmlrpclib.loads( str(data, 'utf8').strip() )
                    else:
                        xml_rsp = xmlrpclib.loads( unicode(data).strip() )
                except xmlrpclib.Fault as e:
                    self.error("A fault occurred: %s" % data)
                    self.error("Fault code: %d" % e.faultCode)
                    self.error("Fault string: %s" % e.faultString)
                else:
                    # example of result: ((['uploadLogs', 200, {'ret': True}],), None)
                    rsp = xml_rsp[0][0]
                    appFunc, appRsp, appRet = rsp
                    if appRsp != 200:
                        self.onUploadErrorFile(callId=xmlrpcData['call-id'])
                    else:
                        if not appRet['ret']:
                            self.onUploadErrorFile(callId=xmlrpcData['call-id'])
                        else:
                            # final signal
                            self.onUploadTerminatedFile(callId=xmlrpcData['call-id'], resultPath=xmlrpcData['result-path'],
                                                            fileName=xmlrpcData['filename'])