All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bdware.doip.audit.writer.OriginalWriter Maven / Gradle / Ivy

There is a newer version: 1.5.4
Show newest version
package org.bdware.doip.audit.writer;

import com.google.gson.Gson;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bdware.doip.audit.OriginalAuditDB;
import org.bdware.doip.auditrepo.AutoAuditDO;
import org.bdware.doip.codec.NaiveEnvelopeToDoMessage;
import org.bdware.doip.codec.doipMessage.DoipMessage;
import org.bdware.doip.codec.exception.DoipConnectException;
import org.bdware.doip.endpoint.client.ClientConfig;
import org.bdware.doip.endpoint.client.DoipClientImpl;
import org.bdware.irp.irplib.core.IrpMessage;
import org.bdware.irp.irplib.core.IrpMessageCode;

public class OriginalWriter extends LogWriter {
    Logger logger = LogManager.getLogger(OriginalWriter.class);
    DoipClientImpl doipClient;
    String doId;
    String tableName;
    OriginalAuditDB originalAuditDB;
    private static NaiveEnvelopeToDoMessage converter = new NaiveEnvelopeToDoMessage();
    AuditConfig auditConfg;

    public OriginalWriter(AuditConfig config, OriginalAuditDB originalAuditDB, String tableName) {
        super();
        doipClient = new DoipClientImpl();
        auditConfg = config;
        this.tableName = tableName;
        this.originalAuditDB = originalAuditDB;
        if (config.getAuditUrl() != null)
            doipClient.connect(ClientConfig.fromUrl(config.getAuditUrl()));
    }

    @Override
    public void write(AuditLog log) {
        writeHash(log);
        try {
            AuditOriginalLog auditOriginalLog = (AuditOriginalLog) log;
            String protocalMsg = new Gson().toJson(log);
            int addCount = originalAuditDB.add(tableName, auditOriginalLog.request_hash, auditOriginalLog.req_msg, auditOriginalLog.response_hash, auditOriginalLog.resp_msg, protocalMsg);
            if (addCount <= 0) {
                logger.info("Failed to add log.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void writeHash(AuditLog log) {
        try {
            if (!doipClient.isConnected()) {
                doipClient.reconnect(auditConfg.getAuditUrl());
            }
            doipClient.sendRawMessage(AutoAuditDO.updateMsg(auditConfg.getAuditDoid(), log.asJson()), emptyCallback);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public AuditLog extract(EndpointContext ctx, IrpMessage req, IrpMessage resp) {
        try {
            AuditOriginalLog log = new AuditOriginalLog();
            log.time = System.currentTimeMillis();
            log.doid = new AuditProtocalLog.DoidInfo();
            extractDOID(log.doid, req.getDoid());
            log.eventType = "irp";
            log.op = IrpMessageCode.toOpStr(req.header.opCode);
            log.status_code = IrpMessageCode.getResponseCodeInfo(resp.header.responseCode);
            log.req_msg = toByteArray(req);
            log.resp_msg = toByteArray(resp);
            log.request_hash = calculateHash(log.req_msg);
            log.response_hash = calculateHash(log.resp_msg);
            log.setClientPubkey(getSigner(req));
            log.setClientIP(ctx.getClientIP());
            log.setClientDoId(ctx.getClientDoId());
            log.setServerPubkey(getSigner(resp));
            log.setServerIP(ctx.getServerIP());
            log.setServerDoId(ctx.getServerDoId());
            return log;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public AuditLog extract(EndpointContext ctx, DoipMessage req, DoipMessage resp) {
        try {
            AuditOriginalLog log = new AuditOriginalLog();
            log.time = System.currentTimeMillis();
            log.doid = new AuditProtocalLog.DoidInfo();
            extractDOID(log.doid, req.header.parameters.id);
            log.eventType = "doip";
            log.op = req.header.parameters.operation;
            log.status_code = resp.header.parameters.response.getName();
            log.req_msg = toByteArray(req);
            log.resp_msg = toByteArray(resp);
            log.request_hash = calculateHash(log.req_msg);
            log.response_hash = calculateHash(log.resp_msg);
            log.setClientPubkey(getSigner(req));
            log.setClientIP(ctx.getClientIP());
            log.setClientDoId(ctx.getClientDoId());
            log.setServerPubkey(getSigner(resp));
            log.setServerIP(ctx.getServerIP());
            log.setServerDoId(ctx.getServerDoId());
            return log;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy