import (
"fmt"
+ "strings"
)
-const cLogBufferMaxSize = 1024
-const cMsgBufferMaxSize = 2048
+const cLogBufferMaxSize = 40960
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
-type PduPackerIf interface {
- PduPack(logBuf []byte, data *PackedData) error
+type PduLoggerBuf struct {
+ logBuffer []byte
}
-func PduPackerPack(entry PduPackerIf, trgBuf *PackedData) error {
-
- var logBuffer []byte = make([]byte, cLogBufferMaxSize)
- logBuffer[0] = 0
+func (lb *PduLoggerBuf) String() string {
+ return "logbuffer(" + string(lb.logBuffer[:strings.Index(string(lb.logBuffer[:]), "\000")]) + ")"
+}
- if trgBuf != nil {
- trgBuf.Buf = make([]byte, cMsgBufferMaxSize)
- }
- err := entry.PduPack(logBuffer, trgBuf)
- if err == nil {
- return nil
- }
- reterr := fmt.Errorf("Pack failed: %s", err.Error())
+func NewPduLoggerBuf() *PduLoggerBuf {
+ lb := &PduLoggerBuf{}
+ lb.logBuffer = make([]byte, cLogBufferMaxSize)
+ lb.logBuffer[0] = 0
+ return lb
+}
- //reterr = fmt.Errorf("%s: PDU:%s", reterr.Error(), string(logBuffer))
- return reterr
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+type PduPackerIf interface {
+ PduPack(logBuf []byte) (error, *PackedData)
}
-func PduPackerPackAllocTrg(entry PduPackerIf, trgBuf *PackedData) (error, *PackedData) {
- dataPacked := trgBuf
- if dataPacked == nil {
- dataPacked = &PackedData{}
- }
- err := PduPackerPack(entry, dataPacked)
- if err != nil {
- return err, nil
+func PduPackerPack(entry PduPackerIf) (error, *PackedData) {
+ lb := NewPduLoggerBuf()
+ err, buf := entry.PduPack(lb.logBuffer)
+ if err == nil {
+ return nil, buf
}
- return nil, dataPacked
+ return fmt.Errorf("Pack failed: err(%s), %s", err.Error(), lb.String()), nil
}
//-----------------------------------------------------------------------------
}
func PduPackerUnPack(entry PduUnPackerIf, data *PackedData) error {
- var logBuffer []byte = make([]byte, cLogBufferMaxSize)
-
- logBuffer[0] = 0
- err := entry.PduUnPack(logBuffer, data)
+ if data == nil {
+ return fmt.Errorf("Unpack failed: data is nil")
+ }
+ lb := NewPduLoggerBuf()
+ err := entry.PduUnPack(lb.logBuffer, data)
if err == nil {
return nil
}
- reterr := fmt.Errorf("Unpack failed: %s", logBuffer)
-
- //reterr = fmt.Errorf("%s: PDU:%s", reterr.Error(), string(logBuffer))
- return reterr
+ return fmt.Errorf("Unpack failed: err(%s), %s", err.Error(), lb.String())
}