mirror of
https://github.com/soypat/lneto.git
synced 2026-08-31 03:49:06 +00:00
begin testing tcp listener (not working)
This commit is contained in:
@@ -31,7 +31,7 @@ func (narp *NodeARP) Demux(EtherFrame []byte, arpOff int) error {
|
||||
}
|
||||
afrm.ValidateSize(&narp.vld)
|
||||
if narp.vld.HasError() {
|
||||
slog.Error("invalid-ARP", slog.String("err", narp.vld.Err().Error()))
|
||||
slog.Error("invalid-ARP", slog.String("err", narp.vld.ErrPop().Error()))
|
||||
return nil
|
||||
}
|
||||
return narp.handler.Recv(EtherFrame[arpOff:])
|
||||
|
||||
@@ -65,9 +65,36 @@ func (listener *NodeTCPListener) Reset(port uint16, pool tcpPool) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (listener *NodeTCPListener) NumberOfReadyToAccept() (nready int) {
|
||||
if listener.isClosed() {
|
||||
return 0
|
||||
}
|
||||
for _, conn := range listener.ready {
|
||||
if conn == nil {
|
||||
continue
|
||||
}
|
||||
nready++
|
||||
}
|
||||
return nready
|
||||
}
|
||||
|
||||
func (listener *NodeTCPListener) TryAccept() (*tcp.Conn, error) {
|
||||
if listener.isClosed() {
|
||||
return nil, net.ErrClosed
|
||||
}
|
||||
for i, conn := range listener.ready {
|
||||
if conn == nil {
|
||||
continue
|
||||
}
|
||||
listener.accepted = append(listener.accepted, conn)
|
||||
listener.ready[i] = nil // discard from ready.
|
||||
return conn, nil
|
||||
}
|
||||
return nil, errors.New("no conns available")
|
||||
}
|
||||
|
||||
func (listener *NodeTCPListener) AcceptRaw() (*tcp.Conn, error) {
|
||||
connid := listener.connID
|
||||
|
||||
for {
|
||||
if listener.isClosed() || connid != listener.connID {
|
||||
return nil, net.ErrClosed
|
||||
|
||||
@@ -34,7 +34,7 @@ func (pc *PacketBreakdown) CaptureEthernet(dst []Frame, pkt []byte, bitOffset in
|
||||
}
|
||||
efrm.ValidateSize(pc.validator())
|
||||
if pc.validator().HasError() {
|
||||
return dst, pc.validator().Err()
|
||||
return dst, pc.validator().ErrPop()
|
||||
}
|
||||
|
||||
finfo := Frame{
|
||||
@@ -61,6 +61,8 @@ func (pc *PacketBreakdown) CaptureEthernet(dst []Frame, pkt []byte, bitOffset in
|
||||
dst, err = pc.CaptureARP(dst, pkt, end)
|
||||
case ethernet.TypeIPv4:
|
||||
dst, err = pc.CaptureIPv4(dst, pkt, end)
|
||||
case ethernet.TypeIPv6:
|
||||
dst, err = pc.CaptureIPv6(dst, pkt, end)
|
||||
default:
|
||||
dst = append(dst, remainingFrameInfo(etype, FieldClassPayload, end, octet*len(pkt)))
|
||||
}
|
||||
@@ -77,7 +79,7 @@ func (pc *PacketBreakdown) CaptureARP(dst []Frame, pkt []byte, bitOffset int) ([
|
||||
}
|
||||
afrm.ValidateSize(pc.validator())
|
||||
if pc.validator().HasError() {
|
||||
return dst, pc.validator().Err()
|
||||
return dst, pc.validator().ErrPop()
|
||||
}
|
||||
|
||||
finfo := Frame{
|
||||
@@ -129,7 +131,7 @@ func (pc *PacketBreakdown) CaptureIPv6(dst []Frame, pkt []byte, bitOffset int) (
|
||||
}
|
||||
ifrm6.ValidateSize(pc.validator())
|
||||
if pc.validator().HasError() {
|
||||
return dst, pc.validator().Err()
|
||||
return dst, pc.validator().ErrPop()
|
||||
}
|
||||
finfo := Frame{
|
||||
Protocol: ethernet.TypeIPv6,
|
||||
@@ -138,7 +140,7 @@ func (pc *PacketBreakdown) CaptureIPv6(dst []Frame, pkt []byte, bitOffset int) (
|
||||
finfo.Fields = append(finfo.Fields, baseIPv6Fields[:]...)
|
||||
dst = append(dst, finfo)
|
||||
proto := ifrm6.NextHeader()
|
||||
end := 40 * octet
|
||||
end := bitOffset + 40*octet
|
||||
return pc.captureIPProto(proto, dst, pkt, end)
|
||||
}
|
||||
|
||||
@@ -152,7 +154,7 @@ func (pc *PacketBreakdown) CaptureIPv4(dst []Frame, pkt []byte, bitOffset int) (
|
||||
}
|
||||
ifrm4.ValidateSize(pc.validator())
|
||||
if pc.validator().HasError() {
|
||||
return dst, pc.validator().Err()
|
||||
return dst, pc.validator().ErrPop()
|
||||
}
|
||||
finfo := Frame{
|
||||
Protocol: ethernet.TypeIPv4,
|
||||
@@ -195,7 +197,7 @@ func (pc *PacketBreakdown) CaptureTCP(dst []Frame, pkt []byte, bitOffset int) ([
|
||||
}
|
||||
tfrm.ValidateSize(pc.validator())
|
||||
if pc.validator().HasError() {
|
||||
return dst, pc.validator().Err()
|
||||
return dst, pc.validator().ErrPop()
|
||||
}
|
||||
end := bitOffset + octet*tfrm.HeaderLength()
|
||||
finfo := Frame{
|
||||
@@ -232,7 +234,7 @@ func (pc *PacketBreakdown) CaptureUDP(dst []Frame, pkt []byte, bitOffset int) ([
|
||||
}
|
||||
ufrm.ValidateSize(pc.validator())
|
||||
if pc.validator().HasError() {
|
||||
return dst, pc.validator().Err()
|
||||
return dst, pc.validator().ErrPop()
|
||||
}
|
||||
finfo := Frame{
|
||||
Protocol: lneto.IPProtoUDP,
|
||||
|
||||
@@ -77,7 +77,7 @@ func (ls *StackEthernet) Demux(carrierData []byte, frameOffset int) (err error)
|
||||
}
|
||||
efrm.ValidateSize(&vld)
|
||||
if vld.HasError() {
|
||||
return vld.Err()
|
||||
return vld.ErrPop()
|
||||
}
|
||||
|
||||
for i := range ls.handlers {
|
||||
|
||||
@@ -78,7 +78,7 @@ func (sb *StackIP) Demux(carrierData []byte, offset int) error {
|
||||
{
|
||||
sb.validator.ResetErr()
|
||||
ifrm.ValidateExceptCRC(&sb.validator)
|
||||
if err = sb.validator.Err(); err != nil {
|
||||
if err = sb.validator.ErrPop(); err != nil {
|
||||
return err
|
||||
}
|
||||
gotCRC := ifrm.CRC()
|
||||
|
||||
Reference in New Issue
Block a user