gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

helper.go (1678B)


      1 // Copyright 2012 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package ipv4
      6 
      7 import (
      8 	"errors"
      9 	"net"
     10 	"runtime"
     11 
     12 	"golang.org/x/net/internal/socket"
     13 )
     14 
     15 var (
     16 	errInvalidConn       = errors.New("invalid connection")
     17 	errMissingAddress    = errors.New("missing address")
     18 	errNilHeader         = errors.New("nil header")
     19 	errHeaderTooShort    = errors.New("header too short")
     20 	errExtHeaderTooShort = errors.New("extension header too short")
     21 	errInvalidConnType   = errors.New("invalid conn type")
     22 	errNotImplemented    = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH)
     23 
     24 	// See https://www.freebsd.org/doc/en/books/porters-handbook/versions.html.
     25 	freebsdVersion  uint32
     26 	compatFreeBSD32 bool // 386 emulation on amd64
     27 )
     28 
     29 // See golang.org/issue/30899.
     30 func adjustFreeBSD32(m *socket.Message) {
     31 	// FreeBSD 12.0-RELEASE is affected by https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236737
     32 	if 1200086 <= freebsdVersion && freebsdVersion < 1201000 {
     33 		l := (m.NN + 4 - 1) &^ (4 - 1)
     34 		if m.NN < l && l <= len(m.OOB) {
     35 			m.NN = l
     36 		}
     37 	}
     38 }
     39 
     40 func boolint(b bool) int {
     41 	if b {
     42 		return 1
     43 	}
     44 	return 0
     45 }
     46 
     47 func netAddrToIP4(a net.Addr) net.IP {
     48 	switch v := a.(type) {
     49 	case *net.UDPAddr:
     50 		if ip := v.IP.To4(); ip != nil {
     51 			return ip
     52 		}
     53 	case *net.IPAddr:
     54 		if ip := v.IP.To4(); ip != nil {
     55 			return ip
     56 		}
     57 	}
     58 	return nil
     59 }
     60 
     61 func opAddr(a net.Addr) net.Addr {
     62 	switch a.(type) {
     63 	case *net.TCPAddr:
     64 		if a == nil {
     65 			return nil
     66 		}
     67 	case *net.UDPAddr:
     68 		if a == nil {
     69 			return nil
     70 		}
     71 	case *net.IPAddr:
     72 		if a == nil {
     73 			return nil
     74 		}
     75 	}
     76 	return a
     77 }