aboutsummaryrefslogtreecommitdiff
path: root/_misc/main.go
diff options
context:
space:
mode:
Diffstat (limited to '_misc/main.go')
-rw-r--r--_misc/main.go251
1 files changed, 251 insertions, 0 deletions
diff --git a/_misc/main.go b/_misc/main.go
new file mode 100644
index 0000000..139b7a2
--- /dev/null
+++ b/_misc/main.go
@@ -0,0 +1,251 @@
+package main
+
+import (
+ "encoding/hex"
+ "flag"
+ "fmt"
+
+ "dim13.org/asn1/ber"
+ "dim13.org/asn1/spdu"
+)
+
+/* Limits
+ *
+ * Parameter Maximum Value
+ *
+ * PDU length including header 240
+ * InvokeID 32767
+ * (ROSE)
+ * DeviceID 32
+ * (MakeCall, DialDigits, ConsulationCall)
+ * DeviceID from TDA/TDE 16
+ * (In events)
+ * charactersToSend 64
+ * (GenerateDigits)
+ */
+
+var service = flag.String("service", "192.168.240.20:33333", "PBX CTI Service")
+var conn spdu.Conn
+
+func init() {
+ flag.Parse()
+}
+
+/* A-ASSOCIATE Request
+ *
+ * 60 23 AARQ-apdu
+ * 80 02 07 80 protocol-version { version1 }
+ * A1 07 application-context-name
+ * 06 05 2B 0C 00 81 5A { 1 3 12 0 218 }
+ * BE 14 user-information
+ * 28 12
+ * 06 07 2B 0C 00 82 1D 81 48 direct-reference { 1 3 12 0 285 200 }
+ * A0 07 single-ASN1-type
+ * (ACSEUserInfomrationForCSTA)
+ * A0 05 newDefinition
+ * 03 03 00 08 00 cSTAVersion { versionFive }
+ */
+
+var associate = []byte{
+ 0x60, 0x23,
+ 0x80, 0x02, 0x07, 0x80,
+ 0xA1, 0x07,
+ 0x06, 0x05, 0x2B, 0x0C, 0x00, 0x81, 0x5A,
+ 0xBE, 0x14,
+ 0x28, 0x12,
+ 0x06, 0x07, 0x2B, 0x0C, 0x00, 0x82, 0x1D, 0x81, 0x48,
+ 0xA0, 0x07,
+ 0xA0, 0x05,
+ 0x03, 0x03, 0x00, 0x08, 0x00,
+}
+
+/* A-ACCOCIATE Result
+ * 61 2F AARE-apdu
+ * 80 02 07 80 protocol-version { version1 }
+ * A1 07 application-context-name
+ * 06 05 2B 0C 00 81 5A { 1 3 12 0 218 }
+ * A2 03 result
+ * 02 01 00 accepted
+ * A3 05 result-source-diagnostic
+ * A1 03 acse-service-user
+ * 02 01 00 no-reason-given
+ * BE 14 user-information
+ * 28 12
+ * 06 07 2B 0C 00 82 1D 81 48 direct-reference { 1 3 120 285 200 }
+ * A0 07 single-ASN1-type
+ * (ACSEUserInformationForCSTA)
+ * A0 05 newDefinition
+ * 03 03 00 08 00 cSTAVersion { versionFive }
+ */
+
+/* A-REJECT
+ * 61 19 AARE-apdu
+ * 80 02 07 80 protocol-version { version1 }
+ * A1 07 application-context-name
+ * 06 05 2B 0C 00 81 5A { 1 3 12 0 218 }
+ * A2 03 result
+ * 02 01 01 rejected-permanent
+ * A3 05 result-source-diagnostic
+ * A1 03 acse-service-user
+ * 02 01 01 no-reason-given
+ */
+
+/* A-RELEASE Request
+ *
+ * 62 00 RLRQ-apdu
+ */
+
+var release = []byte{0x62, 0x00}
+
+/* A-RELEASE Result
+ *
+ * 63 00 RLRE-apdu
+ */
+
+/* SystemStatus Request
+ * A1 0C ROSE-Invoke
+ * 02 01 01 invokeId present: 1
+ * 02 02 00 D3 opcode local: 211
+ * 30 03 SystemStatusArg
+ * 0A 01 02 systemStatus normal
+ */
+
+/* SystemStatus Result
+ * A2 0B ROSE-ReturnResult
+ * 02 01 01 invokeId present: 1
+ * 30 06 SystemStatusRes
+ * 02 02 00 D3 opcode local: 211
+ * 05 00 noData
+ */
+
+var status = []byte{
+ 0xA2, 0x0B,
+ 0x02, 0x01, 0x01,
+ 0x30, 0x06,
+ 0x02, 0x02, 0x00, 0xD3,
+ 0x05, 0x00,
+}
+
+/* A-ABORT
+ * 64 03 ABRT-apdu
+ * 80 01 00 ABRT-source: acse-service-user
+ */
+
+/* Request CO lines
+ * A1 16 ROSE-Invoke
+ * 02 02 00 E0 invokeId: 224
+ * 02 01 33 opcode local: 51
+ * 30 0D EscapeArgument
+ * A4 0B kmeSystemData
+ * A0 09 getSystemData
+ * A4 07 deviceList
+ * A1 05 category
+ * A0 03 standardDevice
+ * 0A 01 02 networkInterface
+ */
+
+/* Request CO lines response
+ * A2 17 ROSE-ResultReturn
+ * 02 02 00 E0 invokeId: 224
+ * 30 11 result
+ * 02 01 33 opcode local: 51
+ * 7E 0C
+ * A1 0A
+ * A4 08
+ * A4 06
+ * 04 04 30 41 31 36 OCTET STRING: '0A16'
+ */
+
+var coLines = []byte{
+ 0xA1, 0x16,
+ 0x02, 0x02, 0x00, 0xE0,
+ 0x02, 0x01, 0x33,
+ 0x30, 0x0D,
+ 0xA4, 0x0B,
+ 0xA0, 0x09,
+ 0xA4, 0x07,
+ 0xA1, 0x05,
+ 0xA0, 0x03,
+ 0x0A, 0x01, 0x02,
+}
+
+/* Request EXT
+ * A1 16 ROSE-Invoke
+ * 02 02 06 02 invokeId: 1538
+ * 02 01 33 opcode local: 51
+ * 30 0D EscapeArgument
+ * A4 0B kmeSystemData
+ * A0 09 getSystemData
+ * A4 07 deviceList
+ * A1 05 category
+ * A0 03 standardDevice
+ * 0A 01 05 station
+ */
+
+var ext = []byte{
+ 0xA1, 0x16,
+ 0x02, 0x02, 0x06, 0x02,
+ 0x02, 0x01, 0x33,
+ 0x30, 0x0D,
+ 0xA4, 0x0B,
+ 0xA0, 0x09,
+ 0xA4, 0x07,
+ 0xA1, 0x05,
+ 0xA0, 0x03,
+ 0x0A, 0x01, 0x05,
+}
+
+/* Monitor 111
+ * A1 11 ROSE-Invoke
+ * 02 01 78 invokeId: 120
+ * 02 01 47 opcode local: 71
+ * 30 09 MonitorStartArgument
+ * 30 05 MonitorObject (CSTAObject)
+ * 80 03 31 31 31 dialingNumber '111'
+ * A0 00 MonitorFilter?
+ */
+
+func dump(b []byte) {
+ fmt.Println(hex.Dump(b))
+ fmt.Println(ber.Dump(b))
+}
+
+func Ask(c spdu.Conn, out []byte) []byte {
+ fmt.Println("Ask")
+ dump(out)
+ c.Write(out)
+ in, _ := spdu.ReadAll(c)
+ fmt.Printf("Packet length: 0x%.2X\n", len(in))
+ dump(in)
+ return in
+}
+
+func Status(c spdu.Conn) {
+ fmt.Println("Status")
+ in, _ := spdu.ReadAll(c)
+ fmt.Printf("Packet length: 0x%.2X\n", len(in))
+ dump(in)
+ out := status
+ out[4] = in[4]
+ dump(out)
+ c.Write(out)
+}
+
+func main() {
+ conn, _ = spdu.Dial(*service)
+ defer conn.Close()
+
+ Ask(conn, associate)
+ Status(conn)
+ defer Ask(conn, release)
+
+ Ask(conn, coLines)
+ Status(conn)
+
+ //Ask(conn, ext)
+ Status(conn)
+ Status(conn)
+ Status(conn)
+ Status(conn)
+ Status(conn)
+}