You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
package icsnet
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"gitlab.com/ics_cinnamon/voicegateway/icserror"
|
|
)
|
|
|
|
var MAX_MTU int = 1500
|
|
|
|
type IcsNeter interface {
|
|
Listen() *icserror.IcsError
|
|
|
|
Connect(localAddr, remoteAddr *IcsNetAddr) *icserror.IcsError
|
|
Close() *icserror.IcsError
|
|
|
|
Write(b []byte) (int, *icserror.IcsError)
|
|
WriteSIP(b []byte) (int, *icserror.IcsError)
|
|
WriteRTP(b []byte) (int, *icserror.IcsError)
|
|
|
|
Read(size int) ([]byte, int, *icserror.IcsError)
|
|
ReadSIP() ([]byte, *net.UDPAddr, int, *icserror.IcsError)
|
|
ReadRTP() ([]byte, *net.UDPAddr, int, *icserror.IcsError)
|
|
|
|
LocalAddr() net.Addr
|
|
RemoteAddr() net.Addr
|
|
SetRemoteAddr(raddr *IcsNetAddr)
|
|
}
|
|
|
|
type IcsConn struct {
|
|
ICSUDPConn *net.UDPConn
|
|
ICSTCPConn *net.TCPConn
|
|
}
|
|
|
|
func GetMyIP() ([]string, *icserror.IcsError) {
|
|
var retIP []string
|
|
ifaces, err := net.Interfaces()
|
|
if err != nil {
|
|
icserror.ICSERRNETNotFoundIF.SetError(err)
|
|
return nil, icserror.ICSERRNETNotFoundIF
|
|
}
|
|
|
|
for iter, i := range ifaces {
|
|
addrs, err := i.Addrs()
|
|
// handle err
|
|
if err != nil {
|
|
icserror.ICSERRNETGetAddr.SetError(err)
|
|
return nil, icserror.ICSERRNETGetAddr
|
|
}
|
|
for _, addr := range addrs {
|
|
var ip net.IP
|
|
switch v := addr.(type) {
|
|
case *net.IPNet:
|
|
ip = v.IP
|
|
case *net.IPAddr:
|
|
ip = v.IP
|
|
}
|
|
retIP[iter] = fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])
|
|
}
|
|
}
|
|
|
|
return retIP, nil
|
|
}
|