From f32e3109526f2d4e980c03dd65f7c94edff4d2b2 Mon Sep 17 00:00:00 2001 From: Determinant Date: Thu, 6 Jun 2019 17:00:25 -0400 Subject: init --- .gitmodules | 3 +++ demo/main.go | 23 +++++++++++++++++++++++ salticidae | 1 + salticidae.go | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 .gitmodules create mode 100644 demo/main.go create mode 160000 salticidae create mode 100644 salticidae.go diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e311f67 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "salticidae"] + path = salticidae + url = https://github.com/Determinant/salticidae.git diff --git a/demo/main.go b/demo/main.go new file mode 100644 index 0000000..e156f45 --- /dev/null +++ b/demo/main.go @@ -0,0 +1,23 @@ +package main + +import "salticidae-go" + +func run(my_addr string, other_addr string) { + netconfig := salticidae.NewMsgNetworkConfig() + ec := salticidae.NewEventContext() + net := salticidae.NewMsgNetwork(ec, netconfig) + listen_addr := salticidae.NewAddrFromIPPortString(my_addr) + connect_addr := salticidae.NewAddrFromIPPortString(other_addr) + + net.Start() + net.Listen(listen_addr) + net.Connect(connect_addr) + ec.Dispatch() +} + +func main() { + alice := "127.0.0.1:10000" + bob := "127.0.0.1:10001" + go run(alice, bob) + run(bob, alice) +} diff --git a/salticidae b/salticidae new file mode 160000 index 0000000..f7050c1 --- /dev/null +++ b/salticidae @@ -0,0 +1 @@ +Subproject commit f7050c145e81a70be85bb0287044abdfa7ba444f diff --git a/salticidae.go b/salticidae.go new file mode 100644 index 0000000..4a8712a --- /dev/null +++ b/salticidae.go @@ -0,0 +1,40 @@ +package salticidae + + +// #cgo CFLAGS: -I${SRCDIR}/salticidae/include/ +// #cgo LDFLAGS: ${SRCDIR}/salticidae/libsalticidae.so -Wl,-rpath=${SRCDIR}/salticidae/ +// #include +// #include "salticidae/netaddr.h" +// #include "salticidae/network.h" +import "C" +import "unsafe" + +type rawptr_t = unsafe.Pointer + +type NetAddr = *C.struct_netaddr_t + +func NewAddrFromIPPortString(addr string) (res NetAddr) { + c_str := C.CString(addr) + res = C.netaddr_new_from_sipport(c_str) + C.free(rawptr_t(c_str)) + return +} + +type MsgNetwork = *C.struct_msgnetwork_t + +type EventContext = *C.struct_eventcontext_t + +func NewEventContext() EventContext { return C.eventcontext_new() } +func (self EventContext) Dispatch() { C.eventcontext_dispatch(self) } + +type MsgNetworkConfig = *C.struct_msgnetwork_config_t + +func NewMsgNetworkConfig() MsgNetworkConfig { return C.msgnetwork_config_new() } + +func NewMsgNetwork(ec EventContext, config MsgNetworkConfig) MsgNetwork { + return C.msgnetwork_new(ec, config) +} + +func (self MsgNetwork) Start() { C.msgnetwork_start(self) } +func (self MsgNetwork) Listen(addr NetAddr) { C.msgnetwork_listen(self, addr) } +func (self MsgNetwork) Connect(addr NetAddr) { C.msgnetwork_connect(self, addr) } -- cgit v1.2.3