Initial commit
This commit is contained in:
162
main.go
Normal file
162
main.go
Normal file
@@ -0,0 +1,162 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"log"
|
||||
"net"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func init() {
|
||||
log.SetFlags(log.Lmicroseconds)
|
||||
}
|
||||
|
||||
// Function to create a submit_sm PDU
|
||||
func createSubmitSMPDU() []byte {
|
||||
// Example values for the submit_sm PDU fields
|
||||
serviceType := "CMT"
|
||||
sourceAddrTON := byte(0x01)
|
||||
sourceAddrNPI := byte(0x01)
|
||||
sourceAddr := "12345"
|
||||
destAddrTON := byte(0x01)
|
||||
destAddrNPI := byte(0x01)
|
||||
destinationAddr := "67890"
|
||||
esmClass := byte(0x00)
|
||||
protocolID := byte(0x00)
|
||||
priorityFlag := byte(0x00)
|
||||
scheduleDeliveryTime := ""
|
||||
validityPeriod := ""
|
||||
registeredDelivery := byte(0x01)
|
||||
replaceIfPresentFlag := byte(0x00)
|
||||
dataCoding := byte(0x00)
|
||||
smDefaultMsgID := byte(0x00)
|
||||
shortMessage := "Hello, SMPP!"
|
||||
|
||||
// Calculate the length of the PDU
|
||||
headerLength := 16
|
||||
bodyLength := 1 + len(serviceType) + 1 + 1 + len(sourceAddr) + 1 + 1 + len(destinationAddr) + 1 + 1 + len(scheduleDeliveryTime) + 1 + len(validityPeriod) + 1 + 1 + 1 + 1 + 1 + len(shortMessage)
|
||||
totalLength := headerLength + bodyLength
|
||||
log.Printf("Total length: %d", totalLength)
|
||||
|
||||
// Create a buffer to hold the PDU
|
||||
var buffer bytes.Buffer
|
||||
|
||||
// Command Length
|
||||
binary.Write(&buffer, binary.BigEndian, uint32(totalLength))
|
||||
|
||||
// Command ID (submit_sm)
|
||||
binary.Write(&buffer, binary.BigEndian, uint32(0x00000004))
|
||||
|
||||
// Command Status (0x00000000 for ESME_ROK)
|
||||
binary.Write(&buffer, binary.BigEndian, uint32(0x00000000))
|
||||
|
||||
// Sequence Number (example value)
|
||||
binary.Write(&buffer, binary.BigEndian, uint32(0x00000001))
|
||||
|
||||
// Service Type
|
||||
buffer.WriteString(serviceType)
|
||||
buffer.WriteByte(0x00)
|
||||
|
||||
// Source Address TON
|
||||
buffer.WriteByte(sourceAddrTON)
|
||||
|
||||
// Source Address NPI
|
||||
buffer.WriteByte(sourceAddrNPI)
|
||||
|
||||
// Source Address
|
||||
buffer.WriteString(sourceAddr)
|
||||
buffer.WriteByte(0x00)
|
||||
|
||||
// Destination Address TON
|
||||
buffer.WriteByte(destAddrTON)
|
||||
|
||||
// Destination Address NPI
|
||||
buffer.WriteByte(destAddrNPI)
|
||||
|
||||
// Destination Address
|
||||
buffer.WriteString(destinationAddr)
|
||||
buffer.WriteByte(0x00)
|
||||
|
||||
// ESM Class
|
||||
buffer.WriteByte(esmClass)
|
||||
|
||||
// Protocol ID
|
||||
buffer.WriteByte(protocolID)
|
||||
|
||||
// Priority Flag
|
||||
buffer.WriteByte(priorityFlag)
|
||||
|
||||
// Schedule Delivery Time
|
||||
buffer.WriteString(scheduleDeliveryTime)
|
||||
buffer.WriteByte(0x00)
|
||||
|
||||
// Validity Period
|
||||
buffer.WriteString(validityPeriod)
|
||||
buffer.WriteByte(0x00)
|
||||
|
||||
// Registered Delivery
|
||||
buffer.WriteByte(registeredDelivery)
|
||||
|
||||
// Replace If Present Flag
|
||||
buffer.WriteByte(replaceIfPresentFlag)
|
||||
|
||||
// Data Coding
|
||||
buffer.WriteByte(dataCoding)
|
||||
|
||||
// SM Default Message ID
|
||||
buffer.WriteByte(smDefaultMsgID)
|
||||
|
||||
// Short Message Length
|
||||
buffer.WriteByte(byte(len(shortMessage)))
|
||||
|
||||
// Short Message
|
||||
buffer.WriteString(shortMessage)
|
||||
|
||||
// Return the PDU as a byte slice
|
||||
return buffer.Bytes()
|
||||
}
|
||||
|
||||
func main() {
|
||||
// addr := ":2775"
|
||||
// listener, err := net.Listen("tcp", addr)
|
||||
// if err != nil {
|
||||
// log.Fatalf("Failed to start SMPP server: %v", err)
|
||||
// }
|
||||
// defer listener.Close()
|
||||
// log.Printf("SMPP server started on %s", addr)
|
||||
|
||||
// go func() {
|
||||
// for {
|
||||
// conn, err := listener.Accept()
|
||||
// if err != nil {
|
||||
// log.Printf("Failed to accept connection: %v", err)
|
||||
// continue
|
||||
// }
|
||||
// go handleConnection(conn)
|
||||
// }
|
||||
// }()
|
||||
|
||||
wg := &sync.WaitGroup{}
|
||||
wg.Add(1)
|
||||
|
||||
conn, err := net.Dial("tcp", "localhost:2775")
|
||||
if err != nil {
|
||||
log.Printf("Failed to connect to SMPP server: %+v", err)
|
||||
return
|
||||
}
|
||||
log.Printf("Connected to SMPP server")
|
||||
defer conn.Close()
|
||||
|
||||
go func() {
|
||||
conn.Write(createSubmitSMPDU())
|
||||
data, err := conn.Read(make([]byte, 1024))
|
||||
if err != nil {
|
||||
log.Printf("Failed to read from connection: %+v", err)
|
||||
return
|
||||
}
|
||||
log.Printf("Received data: %#v", data)
|
||||
}()
|
||||
|
||||
wg.Wait()
|
||||
}
|
Reference in New Issue
Block a user