Files
selfcare/proxy/Nrestful/udp_routers.go
2025-03-25 09:46:16 +08:00

689 lines
18 KiB
Go

package Nrestful
import (
"encoding/binary"
"fmt"
"net"
"proxy/MsgDef"
rdb "proxy/Nredis"
"strconv"
_ "strings"
"time"
l4g "proxy/logger" //"github.com/sirupsen/logrus"
)
var ocsConn *net.UDPConn
func closeConnect() {
ocsConn.Close()
ocsConn = nil
}
var locIp, ocsIp string
var locPort, ocsPort int
func Connect_ocs(loc string, rem string, loc_port int, rem_port int) error {
locIp = loc
ocsIp = rem
locPort = loc_port
ocsPort = rem_port
return connect_ocs()
}
func connect_ocs() error {
loc_ip := net.ParseIP(locIp)
rem_ip := net.ParseIP(ocsIp)
srcAddr := &net.UDPAddr{IP: loc_ip, Port: locPort}
dstAddr := &net.UDPAddr{IP: rem_ip, Port: ocsPort}
var err error
ocsConn, err = net.DialUDP("udp", srcAddr, dstAddr)
if err != nil {
fmt.Println(err)
return err
}
defer closeConnect()
//conn.Write([]byte("hello"))
data := make([]byte, 1500)
//var recLen uint16 = 0
//var msgId uint8 = 0
for {
n, err := ocsConn.Read(data)
//msgId = data[1]
//recLen = uint16(data[2])
//recLen = (recLen << 8) + uint16(data[3])
if err != nil {
//break
} else {
// check param
handle_udp_msg_from_ocs(data, n)
}
//fmt.Printf("read %s from <%s>\n", data[:n], conn.RemoteAddr())
}
l4g.RestLog.Errorln("ocs read thread exit")
return nil
}
//type UdpMsgIE byte
const (
IE_NULL = iota
IE_SRC_REF // UdpMsgIE = 1
IE_DST_REF
IE_MSISDN
IE_RESULT
IE_ERROR_CODE
IE_BALANCE// 6
IE_MO_EXPIRY
IE_MT_EXPIRY
IE_USERNAME
IE_PASSWORD
IE_MSG_CONTENT //value=11
IE_STATUS
IE_REMARK
IE_GROUP_NAME// 0x0e
IE_MO_VOICE_MIN// in minute
IE_REMAIN_MO_VOICE_SEC// in second
IE_REMAIN_MO_VOICE_MIN// in minute
IE_MT_VOICE_MIN// in minute
IE_REMAIN_MT_VOICE_SEC// in second
IE_REMAIN_MT_VOICE_MIN// in minute
IE_SMS_NUM//value=21
IE_REMAIN_SMS_NUM
IE_DATA_VOL_MB// in MB
IE_REMAIN_DATA_VOL_KB// in KB
IE_REMAIN_DATA_VOL_MB// in MB
IE_PAY_TYPE
IE_AMOUNT
IE_VALID_DAYS
IE_EXPIRY_TIME
IE_MSISDN_TRANS_OUT
IE_MSISDN_TRANS_IN //value=31
IE_BALANCE_AVAILABLE
IE_RECHARGE_AMOUNT
IE_RECHARGE_TYPE
IE_RECHARGE_CARD_STATUS
IE_RECHARGE_CARD_FACE_VALUE
IE_RECHARGE_CARD_EXPIRED_TS
IE_RECHARGE_CARD_UPDATED_TS
IE_CUSTOMER_ID
IE_ACCOUNT_ID
IE_PRODUCT_ID//value=41
IE_PLAN_ID
IE_RENT_CHARGE
IE_BIRTHDAY
IE_SMS_CONTENT
IE_SERVICE_TYPE
IE_TARIIFF_PREFIX
IE_TARIFF_UNIT
IE_TARIFF_CHARGE
IE_TARIFF_DISCOUNT
IE_PLAN_VALUE//value=51
IE_PLAN_USED_VALUE
IE_BUNDLE_ID
IE_CAUSE
IE_SESS_FLAG
IE_TIMESTAMP
IE_CONSUME_VALUE
IE_CALLED_NUMBER
IE_UE_IP
IE_GW_IP
IE_CUG_ID
IE_VAS_CUG_STATUS
IE_SESS_UPDATE_TIME
IE_PLAN_VALUE_ADD_THIS_TIME
IE_USER_CLASS
IE_MAX_NUM
)
func handle_udp_msg_from_ocs(buf []byte, msglen int) {
var rsp RestRsp
ret := Decode_udp_msg(buf, msglen, &rsp)
if ret < 0 {
l4g.RestLog.Errorf("Deocde UDP msg fail, msg[%v]", buf[:msglen])
return
}
switch rsp.MsgType {
case REST_CRM_UPDATE_PLAN_INFO_REQ:
go handleUpdatePlanUsage(&rsp)
return
case REST_CRM_DELETE_SUBS_RES:
handleOcsDeleteSubsRsp(&rsp)
case REST_CRM_CREATE_ACCT_RES:
//handleOcsDeleteSubsRsp(&rsp)
case REST_CRM_UPDATE_SUBS_REQ:
go handleOcsUpdateSubsReq(&rsp)
return
}
l4g.RestLog.Debugf("Recv UDP msg from OCS, msg_id[%d], src[%d], dst[%d]", rsp.MsgType, rsp.Src_id, rsp.Dst_id)
if rsp.Dst_id >= MAX_PORT_NUM {
return
}
port := GetPortInfo(rsp.Dst_id, rsp.Src_id)
if port == nil {
l4g.RestLog.Errorf("Get port by dst_id[%d] fail, msg id[%d]", rsp.Dst_id, rsp.MsgType)
return
}
l4g.RestLog.Debugf("Get port by dst_id[%d] from UDP rsp, msg id[%d]", rsp.Dst_id, rsp.MsgType)
go func() {
port.Rsp <- rsp
}()
return
}
func encode_udp_msg(req *RestReq, buf []byte) int {
switch req.MsgType {
case REST_SEND_AUTHCODE_REQ:
case REST_QUERY_USERDATA_REQ:
case REST_BUNDLE_SUBS_REQ:
case REST_RECHARGE_REQ:
case REST_TRANSFER_REQ:
case REST_QUERY_BALANCE_REQ:
case REST_CRM_CREATE_ACCT_REQ:
case REST_CRM_UPDATE_SUBS_REQ:
case REST_CRM_DELETE_SUBS_REQ:
default:
l4g.RestLog.Errorf("Encode rest unsupport msg id[%d]", req.MsgType)
return 0
}
var msglen int = 0
buf[msglen] = req.MsgType
msglen++
buf[msglen] = IE_SRC_REF
msglen++
buf[msglen] = 0x02
msglen++
binary.BigEndian.PutUint16(buf[msglen:msglen+2], req.Src_id)
msglen += 2
buf[msglen] = IE_DST_REF
msglen++
buf[msglen] = 0x02
msglen++
binary.BigEndian.PutUint16(buf[msglen:msglen+2], req.Dst_id)
msglen += 2
var vallen int = 0
switch (req.MsgType) {
case REST_SEND_AUTHCODE_REQ:
l4g.RestLog.Debugf("Encode REST_SEND_AUTHCODE_REQ[%d], %#v", req.MsgType, req.AuthCodeReq)
// IE_MSISDN
buf[msglen] = IE_MSISDN
msglen++
vallen = len(req.AuthCodeReq.TelNumber)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.AuthCodeReq.TelNumber)))
msglen += vallen
// IE_MSG_CONTENT
buf[msglen] = IE_MSG_CONTENT
msglen++
vallen = len(req.AuthCodeReq.Content)
binary.BigEndian.PutUint16(buf[msglen:msglen+2], uint16(vallen))
msglen += 2
copy(buf[msglen:msglen+vallen], ([]byte(req.AuthCodeReq.Content)))
msglen += vallen
case REST_QUERY_USERDATA_REQ:
l4g.RestLog.Debugf("Encode REST_QUERY_USERDATA_REQ[%d], %#v", req.MsgType, req.QueryUserDataReq)
// IE_MSISDN
buf[msglen] = IE_MSISDN
msglen++
vallen = len(req.QueryUserDataReq.TelNumber)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.QueryUserDataReq.TelNumber)))
msglen += vallen
case REST_BUNDLE_SUBS_REQ:
l4g.RestLog.Debugf("Encode REST_BUNDLE_SUBS_REQ[%d], %#v", req.MsgType, req.BundleSubsReq)
// IE_MSISDN
buf[msglen] = IE_MSISDN
msglen++
vallen = len(req.BundleSubsReq.TelNumber)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.BundleSubsReq.TelNumber)))
msglen += vallen
buf[msglen] = IE_PAY_TYPE
msglen++
buf[msglen] = 0x01
msglen++
pay_type, _ := strconv.Atoi(req.BundleSubsReq.PayType)
buf[msglen] = uint8(pay_type)
msglen += 0x01
buf[msglen] = IE_AMOUNT
msglen++
buf[msglen] = 0x04
msglen++
amount, _ := strconv.Atoi(req.BundleSubsReq.ChargedAmount)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(amount))
msglen += 0x04
buf[msglen] = IE_MO_VOICE_MIN
msglen++
buf[msglen] = 0x04
msglen++
moVocMin, _ := strconv.Atoi(req.BundleSubsReq.MoVoiceMinute)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(moVocMin))
msglen += 0x04
buf[msglen] = IE_MT_VOICE_MIN
msglen++
buf[msglen] = 0x04
msglen++
mtVocMin, _ := strconv.Atoi(req.BundleSubsReq.MtVoiceMinute)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(mtVocMin))
msglen += 0x04
buf[msglen] = IE_SMS_NUM
msglen++
buf[msglen] = 0x04
msglen++
smsNum, _ := strconv.Atoi(req.BundleSubsReq.SmsVolume)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(smsNum))
msglen += 0x04
buf[msglen] = IE_DATA_VOL_MB
msglen++
buf[msglen] = 0x04
msglen++
dataVol, _ := strconv.Atoi(req.BundleSubsReq.DataVolume)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(dataVol))
msglen += 0x04
buf[msglen] = IE_VALID_DAYS
msglen++
buf[msglen] = 0x04
msglen++
validDays, _ := strconv.Atoi(req.BundleSubsReq.ValidPeriod)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(validDays))
msglen += 0x04
case REST_RECHARGE_REQ:
l4g.RestLog.Debugf("Encode REST_RECHARGE_REQ[%d], %#v", req.MsgType, req.RechargeReq)
// IE_MSISDN
buf[msglen] = IE_MSISDN
msglen++
vallen = len(req.RechargeReq.TelNumber)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.RechargeReq.TelNumber)))
msglen += vallen
buf[msglen] = IE_AMOUNT
msglen++
buf[msglen] = 0x04
msglen++
amount, _ := strconv.Atoi(req.RechargeReq.Amount)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(amount))
msglen += 0x04
buf[msglen] = IE_RECHARGE_TYPE
msglen++
buf[msglen] = 0x01
msglen++
op_type, _ := strconv.Atoi(req.RechargeReq.OpType)
buf[msglen] = uint8(op_type)
msglen += 0x01
buf[msglen] = IE_VALID_DAYS
msglen++
buf[msglen] = 0x02
msglen++
valid_days, _ := strconv.Atoi(req.RechargeReq.ValidyDays)
binary.BigEndian.PutUint16(buf[msglen:msglen+2], uint16(valid_days))
msglen += 0x02
case REST_TRANSFER_REQ:
l4g.RestLog.Debugf("Encode REST_TRANSFER_REQ[%d], %#v", req.MsgType, req.TransferReq)
// IE_MSISDN_TRANS_OUT
buf[msglen] = IE_MSISDN_TRANS_OUT
msglen++
vallen = len(req.TransferReq.TransferOut)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.TransferReq.TransferOut)))
msglen += vallen
buf[msglen] = IE_MSISDN_TRANS_IN
msglen++
vallen = len(req.TransferReq.TransferIn)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.TransferReq.TransferIn)))
msglen += vallen
buf[msglen] = IE_AMOUNT
msglen++
buf[msglen] = 0x04
msglen++
amount, _ := strconv.Atoi(req.TransferReq.Amount)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(amount))
msglen += 0x04
case REST_QUERY_BALANCE_REQ:
l4g.RestLog.Debugf("Encode REST_QUERY_BALANCE_REQ[%d], %#v", req.MsgType, req.QueryBalanceReq)
// IE_MSISDN
buf[msglen] = IE_MSISDN
msglen++
vallen = len(req.QueryBalanceReq.TelNumber)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.QueryBalanceReq.TelNumber)))
msglen += vallen
case REST_CRM_CREATE_ACCT_REQ:
l4g.RestLog.Debugf("Encode REST_CRM_CREATE_ACCT_REQ[%d], %#v", req.MsgType, req.CreateAccountReq)
// IE_MSISDN
buf[msglen] = IE_MSISDN
msglen++
vallen = len(req.CreateAccountReq.ServiceNbr)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.CreateAccountReq.ServiceNbr)))
msglen += vallen
buf[msglen] = IE_CUSTOMER_ID
msglen++
buf[msglen] = 0x04
msglen++
custId, _ := strconv.Atoi(req.CreateAccountReq.CustId)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(custId))
msglen += 0x04
buf[msglen] = IE_ACCOUNT_ID
msglen++
buf[msglen] = 0x04
msglen++
acctId, _ := strconv.Atoi(req.CreateAccountReq.AccountId)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(acctId))
msglen += 0x04
buf[msglen] = IE_PRODUCT_ID
msglen++
buf[msglen] = 0x04
msglen++
prdId, _ := strconv.Atoi(req.CreateAccountReq.ProductInstId)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(prdId))
msglen += 0x04
buf[msglen] = IE_PLAN_ID
msglen++
buf[msglen] = 0x04
msglen++
planId, _ := strconv.Atoi(req.CreateAccountReq.PackageId)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(planId))
msglen += 0x04
buf[msglen] = IE_BALANCE
msglen++
buf[msglen] = 0x04
msglen++
balance, _ := strconv.Atoi(req.CreateAccountReq.Balance)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(balance))
msglen += 0x04
buf[msglen] = IE_EXPIRY_TIME
msglen++
buf[msglen] = 0x04
msglen++
expire_time, err := time.Parse("2006-01-02 15:04:05", req.CreateAccountReq.BalanceExpDate)
if err != nil {
l4g.RestLog.Errorf("Error CreateAccountReq BalanceExpDate[%s]", req.CreateAccountReq.BalanceExpDate)
return -1
}
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(expire_time.Unix()))
msglen += 0x04
buf[msglen] = IE_RENT_CHARGE
msglen++
buf[msglen] = 0x04
msglen++
rent_charge, _ := strconv.Atoi(req.CreateAccountReq.RentCharge)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(rent_charge))
msglen += 0x04
buf[msglen] = IE_BIRTHDAY
msglen++
buf[msglen] = 0x04
msglen++
birthday, err := time.Parse("2006-01-02", req.CreateAccountReq.Birthday)
if err != nil {
l4g.RestLog.Errorf("Error CreateAccountReq Birthday[%s]", req.CreateAccountReq.Birthday)
return -1
}
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(birthday.Unix()))
msglen += 0x04
buf[msglen] = IE_CUG_ID
msglen++
buf[msglen] = 0x04
msglen++
cugId, _ := strconv.Atoi(req.CreateAccountReq.CugId)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(cugId))
msglen += 0x04
buf[msglen] = IE_USER_CLASS
msglen++
buf[msglen] = 0x01
msglen++
userClass, _ := strconv.Atoi(req.CreateAccountReq.UserClass)
buf[msglen] = byte(userClass)
msglen += 0x01
case REST_CRM_UPDATE_SUBS_REQ:
l4g.RestLog.Debugf("Encode REST_CRM_UPDATE_SUBS_REQ[%d], %#v", req.MsgType, req.UpdateSubsReq)
// IE_MSISDN
buf[msglen] = IE_MSISDN
msglen++
vallen = len(req.UpdateSubsReq.TelNumber)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.UpdateSubsReq.TelNumber)))
msglen += vallen
buf[msglen] = IE_ACCOUNT_ID
msglen++
buf[msglen] = 0x04
msglen++
acctId, _ := strconv.Atoi(req.UpdateSubsReq.AccountId)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(acctId))
msglen += 0x04
if (len(req.UpdateSubsReq.Status) > 0) {
buf[msglen] = IE_STATUS
msglen++
buf[msglen] = 0x01
msglen++
status, _ := strconv.Atoi(req.UpdateSubsReq.Status)
buf[msglen] = byte(status)
msglen += 0x01
}
if (len(req.UpdateSubsReq.Balance) > 0) {
buf[msglen] = IE_BALANCE
msglen++
buf[msglen] = 0x04
msglen++
balance, _ := strconv.Atoi(req.UpdateSubsReq.Balance)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(balance))
msglen += 0x04
}
if (len(req.UpdateSubsReq.BalanceExpDate) > 0) {
buf[msglen] = IE_EXPIRY_TIME
msglen++
buf[msglen] = 0x04
msglen++
expiryTime, err := time.Parse("2006-01-02 15:04:05", req.UpdateSubsReq.BalanceExpDate)
if err != nil {
l4g.RestLog.Errorf("Error UpdateSubsReq BalanceExpDate[%s]", req.UpdateSubsReq.BalanceExpDate)
return -1
}
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(expiryTime.Unix()))
msglen += 0x04
}
if (len(req.UpdateSubsReq.PackageId) > 0) {
buf[msglen] = IE_PLAN_ID
msglen++
buf[msglen] = 0x04
msglen++
planId, _ := strconv.Atoi(req.UpdateSubsReq.PackageId)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(planId))
msglen += 0x04
}
if (len(req.UpdateSubsReq.RentCharge) > 0) {
buf[msglen] = IE_RENT_CHARGE
msglen++
buf[msglen] = 0x04
msglen++
rentCharge, _ := strconv.Atoi(req.UpdateSubsReq.RentCharge)
binary.BigEndian.PutUint32(buf[msglen:msglen+4], uint32(rentCharge))
msglen += 0x04
}
if (len(req.UpdateSubsReq.VasCugStatus) > 0) {
buf[msglen] = IE_VAS_CUG_STATUS
msglen++
buf[msglen] = 0x01
msglen++
vasCugStatus, _ := strconv.Atoi(req.UpdateSubsReq.VasCugStatus)
buf[msglen] = byte(vasCugStatus)
msglen += 0x01
}
case REST_CRM_DELETE_SUBS_REQ:
l4g.RestLog.Debugf("Encode REST_CRM_DELETE_SUBS_REQ[%d], %#v", req.MsgType, req.DeleteSubsReq)
// IE_MSISDN
buf[msglen] = IE_MSISDN
msglen++
vallen = len(req.DeleteSubsReq.TelNumber)
buf[msglen] = byte(vallen)
msglen++
copy(buf[msglen:msglen+vallen], ([]byte(req.DeleteSubsReq.TelNumber)))
msglen += vallen
buf[msglen] = IE_CAUSE
msglen++
buf[msglen] = 0x01
msglen++
buf[msglen] = 0
msglen += 0x01
default:
return 0
}
return msglen
}
func SendOcsUdpReq(req *RestReq) {
if ocsConn == nil {
return
}
l4g.RestLog.Debugf("Send UDP msg to OCS, msg_id[%d], src[%d], dst[%d]", req.MsgType, req.Src_id, req.Dst_id)
buf := make([]byte, 1024)
msglen := encode_udp_msg(req, buf)
if msglen > 0 {
ocsConn.Write([]byte(buf[:msglen]))
}
return
}
func SendNtfSms2Ocs(serviceNbr string, smsContent string) {
var req RestReq
req.MsgType = REST_SEND_AUTHCODE_REQ
req.Src_id = 0xFFFF
req.Dst_id = 0xFFFF
req.AuthCodeReq.TelNumber = serviceNbr
req.AuthCodeReq.Content = smsContent
SendOcsUdpReq(&req)
}
func SendCrtAcct2Ocs(serviceNbr string, ai *MsgDef.ChgSyncMobile, cugId, userClass, rent int) {
var req RestReq
req.MsgType = REST_CRM_CREATE_ACCT_REQ
req.Src_id = 0xFFFF
req.Dst_id = 0xFFFF
req.CreateAccountReq.ServiceNbr = serviceNbr
req.CreateAccountReq.CustId = strconv.Itoa(ai.CustId)
req.CreateAccountReq.AccountId = strconv.Itoa(ai.AcctId)
req.CreateAccountReq.ProductInstId = strconv.Itoa(ai.PrdInstId)
req.CreateAccountReq.PackageId = strconv.Itoa(ai.OfrId)
req.CreateAccountReq.UserClass = strconv.Itoa(userClass)
req.CreateAccountReq.CugId = strconv.Itoa(cugId)
req.CreateAccountReq.Balance = strconv.Itoa(ai.Balance)
//t, _ := time.Parse("2006-01-02 15:04:05", ai.BirthDate)
req.CreateAccountReq.Birthday = ai.BirthDate
//t, _ := time.Parse("2006-01-02 15:04:05", ai.BalanceExpDate)
req.CreateAccountReq.BalanceExpDate = ai.BalanceExpDate
req.CreateAccountReq.RentCharge = strconv.Itoa(rent)
SendOcsUdpReq(&req)
}
func CreateAcct2Ocs(serviceNbr string, ai *MsgDef.ChgSyncMobile, cugId, userClass, rent int, key string) {
var req RestReq
req.MsgType = REST_CRM_CREATE_ACCT_REQ
req.Src_id = 0xFFFF
req.Dst_id = 0xFFFF
req.CreateAccountReq.ServiceNbr = serviceNbr
req.CreateAccountReq.CustId = strconv.Itoa(ai.CustId)
req.CreateAccountReq.AccountId = strconv.Itoa(ai.AcctId)
req.CreateAccountReq.ProductInstId = strconv.Itoa(ai.PrdInstId)
req.CreateAccountReq.PackageId = strconv.Itoa(ai.OfrId)
req.CreateAccountReq.UserClass = strconv.Itoa(userClass)
req.CreateAccountReq.CugId = strconv.Itoa(cugId)
req.CreateAccountReq.Balance = strconv.Itoa(ai.Balance)
//t, _ := time.Parse("2006-01-02 15:04:05", ai.BirthDate)
req.CreateAccountReq.Birthday = ai.BirthDate
//t, _ := time.Parse("2006-01-02 15:04:05", ai.BalanceExpDate)
req.CreateAccountReq.BalanceExpDate = ai.BalanceExpDate
req.CreateAccountReq.RentCharge = strconv.Itoa(rent)
l4g.RestLog.Debugf("Got createAcct request: %v", req.CreateAccountReq)
// handle ==========================================
port := AssignPort(&req)
if port == nil {
l4g.RestLog.Warnf("Assign port for createAcct request fail, serviceNbr[%s], key[%s]", serviceNbr, key)
return
}
l4g.RestLog.Debugf("Assign port for createAcct request, serviceNbr, src[%d], dst[%d]", serviceNbr, req.Src_id, req.Dst_id)
ocsRsp := getOcsRsp(&req, port)
if ocsRsp == nil {
l4g.RestLog.Warnf("getOcsRsp timeout for createAcct request, serviceNbr[%s], key[%s]", serviceNbr, key)
} else {
l4g.RestLog.Infof("getOcsRsp succ for createAcct request, serviceNbr[%s], key[%s]", serviceNbr, key)
rdb.RdsDelMsg2OcsKey(key)
}
return
}