001/*
002* Licensed to the Apache Software Foundation (ASF) under one or more
003* contributor license agreements. See the NOTICE file distributed with
004* this work for additional information regarding copyright ownership.
005* The ASF licenses this file to You under the Apache license, Version 2.0
006* (the "License"); you may not use this file except in compliance with
007* the License. You may obtain a copy of the License at
008*
009*      http://www.apache.org/licenses/LICENSE-2.0
010*
011* Unless required by applicable law or agreed to in writing, software
012* distributed under the License is distributed on an "AS IS" BASIS,
013* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014* See the license for the specific language governing permissions and
015* limitations under the license.
016*/
017package org.apache.logging.log4j.core.appender;
018
019import java.nio.charset.Charset;
020
021/**
022 * Wrapper for messages that are formatted according to RFC 5425.
023 */
024public class TLSSyslogFrame {
025    public static final char SPACE = ' ';
026
027    private String message;
028    private int messageLengthInBytes;
029
030    public TLSSyslogFrame(String message) {
031        setMessage(message);
032    }
033
034    public String getMessage() {
035        return this.message;
036    }
037
038    public void setMessage(String message) {
039        this.message = message;
040        setLengthInBytes();
041    }
042
043    private void setLengthInBytes() {
044        messageLengthInBytes = message.length();
045    }
046
047    public byte[] getBytes() {
048        String frame = toString();
049        return frame.getBytes(Charset.defaultCharset());
050    }
051
052    @Override
053    public String toString() {
054        String length = Integer.toString(messageLengthInBytes);
055        return length + SPACE + message;
056    }
057
058    @Override
059    public boolean equals(Object frame) {
060        return super.equals(frame);
061    }
062
063    public boolean equals(TLSSyslogFrame frame) {
064        return isLengthEquals(frame) && isMessageEquals(frame);
065    }
066
067    private boolean isLengthEquals(TLSSyslogFrame frame) {
068        return this.messageLengthInBytes == frame.messageLengthInBytes;
069    }
070
071    private boolean isMessageEquals(TLSSyslogFrame frame) {
072        return this.message.equals(frame.message);
073    }
074}