//export goTunnelWrite // goTunnelWrite sends data from the client to the destination. func goTunnelWrite(tunno C.uint32_t, write *C.char, size C.size_t) C.int { tunnelMu.Lock() t, ok := tunnels[uint32(tunno)] tunnelMu.Unlock() if ok { size := int(size) buf := make([]byte, size) for i := 0; i < size; i++ { buf[i] = byte(C.charAt(write, C.int(i))) } if t.Status() != StatusProxying { return C.ERR_ABRT } t.connOut.SetWriteDeadline(time.Now().Add(ioTimeout)) if _, err := t.connOut.Write(buf); err == nil { return C.ERR_OK } } return C.ERR_ABRT }
//export goTunnelWrite func goTunnelWrite(tunno C.uint32_t, write *C.char, size C.size_t) C.int { tunnelMu.Lock() tunn, ok := tunnels[uint32(tunno)] defer tunnelMu.Unlock() if ok { size := int(size) buf := make([]byte, size) for i := 0; i < size; i++ { buf[i] = byte(C.charAt(write, C.int(i))) } if _, err := tunn.connOut.Write(buf); err == nil { return C.ERR_OK } } return C.ERR_ABRT }