作者:rayyang200
项目:gomilte
//export Go_xxfi_connect
func Go_xxfi_connect(ctx *C.SMFICTX, hostname *C.char, hostaddr *C._SOCK_ADDR) C.sfsistat {
ctxptr := ctx2int(ctx)
var ip net.IP
if hostaddr.sa_family == C.AF_INET {
hostaddrin := (*sockaddr_in)(unsafe.Pointer(hostaddr))
ip_addr := make([]byte, 4)
binary.LittleEndian.PutUint32(ip_addr, hostaddrin.sin_addr)
ip = net.IPv4(ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3])
} else if hostaddr.sa_family == C.AF_INET6 {
sa_in := (*C.struct_sockaddr_in6)(unsafe.Pointer(hostaddr))
ip = net.IP(C.GoBytes(unsafe.Pointer(&sa_in.sin6_addr), 16))
} else {
if milter.GetDebug() {
logger.Println("hostaddr.sa_family value not implemented")
}
ip = net.ParseIP("::")
}
m := milter.(checkForConnect)
code := m.Connect(ctxptr, C.GoString(hostname), ip)
if milter.GetDebug() {
logger.Printf("Connect callback returned: %d\n", code)
}
return C.sfsistat(code)
}
作者:rayyang200
项目:gomilte
//export Go_xxfi_header
func Go_xxfi_header(ctx *C.SMFICTX, headerf, headerv *C.char) C.sfsistat {
m := milter.(checkForHeader)
code := m.Header(ctx2int(ctx), C.GoString(headerf), C.GoString(headerv))
if milter.GetDebug() {
logger.Printf("Header callback returned: %d\n", code)
}
return C.sfsistat(code)
}
作者:davru
项目:gomilte
//export Go_xxfi_helo
func Go_xxfi_helo(ctx *C.SMFICTX, helohost *C.char) C.sfsistat {
m := milter.(checkForHelo)
code := m.Helo(ctx2int(ctx), C.GoString(helohost))
if milter.GetDebug() {
LoggerPrintf("Helo callback returned: %d\n", code)
}
return C.sfsistat(code)
}
作者:rayyang200
项目:gomilte
//export Go_xxfi_close
func Go_xxfi_close(ctx *C.SMFICTX) C.sfsistat {
// Call our application's callback
m := milter.(checkForClose)
code := m.Close(ctx2int(ctx))
if milter.GetDebug() {
logger.Printf("Close callback returned: %d\n", code)
}
return C.sfsistat(code)
}
作者:rayyang200
项目:gomilte
//export Go_xxfi_envrcpt
func Go_xxfi_envrcpt(ctx *C.SMFICTX, argv **C.char) C.sfsistat {
// Call our application's callback
m := milter.(checkForEnvRcpt)
code := m.EnvRcpt(ctx2int(ctx), cStringArrayToSlice(argv))
if milter.GetDebug() {
logger.Printf("EnvRcpt callback returned: %d\n", code)
}
return C.sfsistat(code)
}
作者:davru
项目:gomilte
//export Go_xxfi_abort
func Go_xxfi_abort(ctx *C.SMFICTX) C.sfsistat {
// Call our application's callback
m := milter.(checkForAbort)
code := m.Abort(ctx2int(ctx))
if milter.GetDebug() {
LoggerPrintf("Abort callback returned: %d\n", code)
}
return C.sfsistat(code)
}
作者:rayyang200
项目:gomilte
//export Go_xxfi_body
func Go_xxfi_body(ctx *C.SMFICTX, bodyp *C.uchar, bodylen C.size_t) C.sfsistat {
// Create a byte slice from the body pointer.
// The body pointer just points to a sequence of bytes
// Our bit slice is backed by the original body. No copy is made here
// Be aware that converting the byte slice to string will make a copy
var b []byte
b = (*[1 << 30]byte)(unsafe.Pointer(bodyp))[0:bodylen]
// Call our application's callback
m := milter.(checkForBody)
code := m.Body(ctx2int(ctx), b)
if milter.GetDebug() {
logger.Printf("Body callback returned: %d\n", code)
}
return C.sfsistat(code)
}