func()

in pkg/tools/ssl/node.go [47:96]


func (r *Register) Node(sslSymbolOffsetsMap, nodeTLSSymbolOffsetsMap *ebpf.Map,
	sslWrite, sslWriteRet, sslRead, sslReadRet,
	sslNew, tlsWrap, tlsWrapRet *ebpf.Program) {
	r.addHandler("Node", func() (bool, error) {
		libSSLModule, nodeModule, openSSLAttach, err := r.findNodeTLSModules()
		if err != nil {
			return false, err
		}
		if libSSLModule == nil || nodeModule == nil {
			return false, nil
		}
		v, err := r.getNodeVersion(nodeModule.Path)
		if err != nil {
			return false, err
		}
		log.Debugf("read the nodejs version, pid: %d, version: %s", r.pid, v)
		// openSSL symbol offsets
		if sslSymbolOffsetsMap != nil {
			config, err := r.buildOpenSSLSymAddrConfig(libSSLModule.Path)
			if err != nil {
				return false, err
			}
			if err := sslSymbolOffsetsMap.Put(uint32(r.pid), config); err != nil {
				return false, err
			}
		}
		if nodeTLSSymbolOffsetsMap != nil {
			config, err := r.findNodeTLSAddrConfig(v)
			if err != nil {
				return false, err
			}
			// setting the locations
			if err := nodeTLSSymbolOffsetsMap.Put(uint32(r.pid), config); err != nil {
				return false, fmt.Errorf("setting the node TLS location failure, pid: %d, error: %v", r.pid, err)
			}
		}
		libSSLLinker := r.linker.OpenUProbeExeFile(libSSLModule.Path)
		if openSSLAttach {
			libSSLLinker.AddLink("SSL_write", sslWrite, sslWriteRet)
			libSSLLinker.AddLink("SSL_read", sslRead, sslReadRet)
		}
		if e := r.nodeTLSRegisterProbes(v, libSSLLinker, nodeModule, sslNew, tlsWrap, tlsWrapRet); e != nil {
			return false, e
		}
		if e := r.linker.HasError(); e != nil {
			return false, e
		}
		return true, nil
	})
}