summaryrefslogtreecommitdiff
path: root/deprecated-webircgateway/pkg/identd/rpcclient.go
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-11-02 15:29:28 +0800
committerMistivia <i@mistivia.com>2025-11-02 15:29:28 +0800
commit9f42c2d5f911cb4e215d7873221e642ce7df4d61 (patch)
tree6dac90a889a7402a9556d3d1bcc5cb53cdb9f123 /deprecated-webircgateway/pkg/identd/rpcclient.go
parentfb2d9de539b660a261af19b1cbcceb7ee7980cb1 (diff)
deprecate webircdateway and ngircd
Diffstat (limited to 'deprecated-webircgateway/pkg/identd/rpcclient.go')
-rw-r--r--deprecated-webircgateway/pkg/identd/rpcclient.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/deprecated-webircgateway/pkg/identd/rpcclient.go b/deprecated-webircgateway/pkg/identd/rpcclient.go
new file mode 100644
index 0000000..37aec3e
--- /dev/null
+++ b/deprecated-webircgateway/pkg/identd/rpcclient.go
@@ -0,0 +1,59 @@
+package identd
+
+import "net"
+import "fmt"
+import "time"
+
+func MakeRpcClient(appName string) *RpcClient {
+ return &RpcClient{AppName: appName}
+}
+
+type RpcClient struct {
+ AppName string
+ Conn *net.Conn
+}
+
+func (rpc *RpcClient) ConnectAndReconnect(serverAddress string) {
+ for {
+ if rpc.Conn == nil {
+ println("Connecting to identd RPC...")
+ rpc.Connect(serverAddress)
+ }
+
+ time.Sleep(time.Second * 3)
+ }
+}
+
+func (rpc *RpcClient) Connect(serverAddress string) error {
+ conn, err := net.Dial("tcp", serverAddress)
+ if err != nil {
+ return err
+ }
+
+ rpc.Conn = &conn
+ rpc.Write("id " + rpc.AppName)
+
+ return nil
+}
+
+func (rpc *RpcClient) Write(line string) error {
+ if rpc.Conn == nil {
+ return fmt.Errorf("not connected")
+ }
+
+ conn := *rpc.Conn
+ _, err := conn.Write([]byte(line + "\n"))
+ if err != nil {
+ rpc.Conn = nil
+ conn.Close()
+ }
+ return err
+}
+
+func (rpc *RpcClient) AddIdent(lport int, rport int, username string, iface string) {
+ rpc.Write(fmt.Sprintf("add %s %d %d %s", username, lport, rport, iface))
+}
+
+func (rpc *RpcClient) RemoveIdent(lport int, rport int, username string, iface string) {
+ rpc.Write(fmt.Sprintf("del %d %d %s", lport, rport, iface))
+}