package ssh

import (
	"git.loafle.net/overflow/overflow_probe/matcher/packet"
	"git.loafle.net/overflow/overflow_probe/model/scaninfo"
	"strings"
)

type SSHMatcher struct {
	sendPackets []*packet.Packet
}

func (ssh *SSHMatcher) Match(index int, packet *packet.Packet, info scaninfo.ServiceScanInfo) bool {
	result := false

	if packet == nil || packet.Buffer == nil || packet.Len == 0 {
		return result
	}

	str := string(packet.Buffer)

	//fmt.Println(str)
	temps := strings.Split(str, " ")
	protocol := strings.Split(temps[0], "-")
	//osType := temps[1]

	if 0 == strings.Compare(protocol[0], "SSH") {
		majorVersion := protocol[1]
		//fmt.Println(majorVersion)
		if 0 == strings.Compare(majorVersion, "2.0") || 0 == strings.Compare(majorVersion, "1.0") {
			result = true
		}
	}

	return result
}

func (ssh *SSHMatcher) PacketCount() int {
	return len(ssh.sendPackets)
}

func (ssh *SSHMatcher) Packet(index int) *packet.Packet {
	return ssh.sendPackets[index]
}

func (ssh *SSHMatcher) ServiceName() string {
	return "SSH"
}

func (ssh *SSHMatcher) IsError(index int, packet *packet.Packet, info scaninfo.ServiceScanInfo) bool {
	return false
}

func (ssh *SSHMatcher) IsNoResponse(index int) bool {
	return false
}

func (ssh *SSHMatcher) IsPrePacket() bool {
	return true
}

func NewSSHMatcher() *SSHMatcher {
	r := SSHMatcher{}

	return &r
}
