Skip to content

Commit

Permalink
more Go like and shorter
Browse files Browse the repository at this point in the history
  • Loading branch information
miekg committed Apr 29, 2012
1 parent f750961 commit 8ed7f99
Showing 1 changed file with 10 additions and 32 deletions.
42 changes: 10 additions & 32 deletions pcap.go
Expand Up @@ -25,8 +25,6 @@ type Pcap struct {


type pcapError struct{ string } type pcapError struct{ string }


func (e *pcapError) Error() string { return e.string }

type Stat struct { type Stat struct {
PacketsReceived uint32 PacketsReceived uint32
PacketsDropped uint32 PacketsDropped uint32
Expand All @@ -46,6 +44,12 @@ type IFAddress struct {
// TODO: add broadcast + PtP dst ? // TODO: add broadcast + PtP dst ?
} }


func Version() string { return C.GoString(C.pcap_lib_version()) }
func (p *Pcap) Datalink() int { return int(C.pcap_datalink(p.cptr)) }
func (e *pcapError) Error() string { return e.string }
func (p *Pcap) Geterror() error { return &pcapError{C.GoString(C.pcap_geterr(p.cptr))} }
func (p *Pcap) Next() (pkt *Packet) { rv, _ := p.NextEx(); return rv }

// Openlive opens a device and returns a *Pcap handler // Openlive opens a device and returns a *Pcap handler
func OpenLive(device string, snaplen int32, promisc bool, timeout_ms int32) (handle *Pcap, err error) { func OpenLive(device string, snaplen int32, promisc bool, timeout_ms int32) (handle *Pcap, err error) {
var buf *C.char var buf *C.char
Expand Down Expand Up @@ -90,12 +94,6 @@ func OpenOffline(file string) (handle *Pcap, err error) {
return return
} }


func (p *Pcap) Next() (pkt *Packet) {
rv, _ := p.NextEx()

return rv
}

func (p *Pcap) NextEx() (pkt *Packet, result int32) { func (p *Pcap) NextEx() (pkt *Packet, result int32) {
var pkthdr_ptr *C.struct_pcap_pkthdr var pkthdr_ptr *C.struct_pcap_pkthdr
var pkthdr C.struct_pcap_pkthdr var pkthdr C.struct_pcap_pkthdr
Expand All @@ -108,7 +106,6 @@ func (p *Pcap) NextEx() (pkt *Packet, result int32) {
pkthdr = *pkthdr_ptr pkthdr = *pkthdr_ptr


if nil == buf { if nil == buf {
pkt = nil
return return
} }
pkt = new(Packet) pkt = new(Packet)
Expand All @@ -121,14 +118,9 @@ func (p *Pcap) NextEx() (pkt *Packet, result int32) {
for i := uint32(0); i < pkt.Caplen; i++ { for i := uint32(0); i < pkt.Caplen; i++ {
pkt.Data[i] = *(*byte)(unsafe.Pointer(uintptr(buf) + uintptr(i))) pkt.Data[i] = *(*byte)(unsafe.Pointer(uintptr(buf) + uintptr(i)))
} }

return return
} }


func (p *Pcap) Geterror() error {
return &pcapError{C.GoString(C.pcap_geterr(p.cptr))}
}

func (p *Pcap) Getstats() (stat *Stat, err error) { func (p *Pcap) Getstats() (stat *Stat, err error) {
var cstats _Ctype_struct_pcap_stat var cstats _Ctype_struct_pcap_stat
if -1 == C.pcap_stats(p.cptr, &cstats) { if -1 == C.pcap_stats(p.cptr, &cstats) {
Expand All @@ -144,7 +136,6 @@ func (p *Pcap) Getstats() (stat *Stat, err error) {


func (p *Pcap) Setfilter(expr string) (err error) { func (p *Pcap) Setfilter(expr string) (err error) {
var bpf _Ctype_struct_bpf_program var bpf _Ctype_struct_bpf_program

cexpr := C.CString(expr) cexpr := C.CString(expr)
defer C.free(unsafe.Pointer(cexpr)) defer C.free(unsafe.Pointer(cexpr))


Expand All @@ -156,19 +147,10 @@ func (p *Pcap) Setfilter(expr string) (err error) {
C.pcap_freecode(&bpf) C.pcap_freecode(&bpf)
return p.Geterror() return p.Geterror()
} }

C.pcap_freecode(&bpf) C.pcap_freecode(&bpf)
return nil return nil
} }


func Version() string {
return C.GoString(C.pcap_lib_version())
}

func (p *Pcap) Datalink() int {
return int(C.pcap_datalink(p.cptr))
}

func (p *Pcap) Setdatalink(dlt int) error { func (p *Pcap) Setdatalink(dlt int) error {
if -1 == C.pcap_set_datalink(p.cptr, C.int(dlt)) { if -1 == C.pcap_set_datalink(p.cptr, C.int(dlt)) {
return p.Geterror() return p.Geterror()
Expand All @@ -177,16 +159,14 @@ func (p *Pcap) Setdatalink(dlt int) error {
} }


func DatalinkValueToName(dlt int) string { func DatalinkValueToName(dlt int) string {
name := C.pcap_datalink_val_to_name(C.int(dlt)) if name := C.pcap_datalink_val_to_name(C.int(dlt)); name != nil {
if nil != name {
return C.GoString(name) return C.GoString(name)
} }
return "" return ""
} }


func DatalinkValueToDescription(dlt int) string { func DatalinkValueToDescription(dlt int) string {
desc := C.pcap_datalink_val_to_description(C.int(dlt)) if desc := C.pcap_datalink_val_to_description(C.int(dlt)); desc != nil {
if nil != desc {
return C.GoString(desc) return C.GoString(desc)
} }
return "" return ""
Expand Down Expand Up @@ -227,12 +207,10 @@ func findalladdresses(addresses *_Ctype_struct_pcap_addr) (retval []IFAddress) {
for curaddr := addresses; curaddr != nil; curaddr = (*_Ctype_struct_pcap_addr)(curaddr.next) { for curaddr := addresses; curaddr != nil; curaddr = (*_Ctype_struct_pcap_addr)(curaddr.next) {
var a IFAddress var a IFAddress
var err error var err error
a.IP, err = sockaddr_to_IP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.addr))) if a.IP, err = sockaddr_to_IP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.addr))); err != nil {
if err != nil {
continue continue
} }
a.Netmask, err = sockaddr_to_IP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.addr))) if a.Netmask, err = sockaddr_to_IP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.addr))); err != nil {
if err != nil {
continue continue
} }
retval = append(retval, a) retval = append(retval, a)
Expand Down

0 comments on commit 8ed7f99

Please sign in to comment.