fix: adjustment directory structure
This commit is contained in:
423
proxy/Nrestful/rest_router.go
Normal file
423
proxy/Nrestful/rest_router.go
Normal file
@@ -0,0 +1,423 @@
|
||||
package Nrestful
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"fmt"
|
||||
"log"
|
||||
"encoding/json"
|
||||
mysql "proxy/Nmysql"
|
||||
|
||||
//"strconv"
|
||||
"time"
|
||||
|
||||
l4g "proxy/logger"//"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
func StartHttpServer(addr string) {
|
||||
http.HandleFunc("/", handler)
|
||||
http.HandleFunc("/authcode", authcodeHandler)
|
||||
http.HandleFunc("/query_userdata", query_userdataHandler)
|
||||
http.HandleFunc("/bundle_subs", bundle_subsHandler)
|
||||
//http.HandleFunc("/bundle_usage", bundle_usageHandler)
|
||||
http.HandleFunc("/recharge", rechargeHandler)
|
||||
http.HandleFunc("/transfer", transferHandler)
|
||||
//http.HandleFunc("/recharge_card", recharge_cardHandler)
|
||||
//http.HandleFunc("/check_balance", check_balanceHandler)
|
||||
http.HandleFunc("/query_balane", query_balanceHandler)// query_balane in Pcap from CRM
|
||||
http.HandleFunc("/openPackage", openPackageHandler)
|
||||
http.HandleFunc("/updateSubs", updateSubsHandler)
|
||||
http.HandleFunc("/deleteSubs", deleteSubsHandler)
|
||||
|
||||
log.Fatal(http.ListenAndServe(addr, nil))
|
||||
}
|
||||
|
||||
// handler echoes the Path component of the requested URL.
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path)
|
||||
}
|
||||
|
||||
func authcodeHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rsp := RestRsp{MsgType: REST_SEND_AUTHCODE_RSP}
|
||||
var pRsp *RestRsp = &rsp
|
||||
if r.Body == nil {
|
||||
rsp.AuthCodeRsp.Message = "request body missing"
|
||||
sendAuthCodeRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
var req RestReq
|
||||
req.MsgType = REST_SEND_AUTHCODE_REQ
|
||||
err := json.NewDecoder(r.Body).Decode(&req.AuthCodeReq)
|
||||
if err != nil {
|
||||
rsp.AuthCodeRsp.Message = "err decode authCodeReq"
|
||||
sendAuthCodeRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Got authcode request: %v", req.AuthCodeReq)
|
||||
|
||||
// handle ==========================================
|
||||
port := AssignPort(&req)
|
||||
if port == nil {
|
||||
rsp.AuthCodeRsp.Message = "err port full"
|
||||
sendAuthCodeRsp(w, http.StatusInternalServerError, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Assign port for authcode request, src[%d], dst[%d]", req.Src_id, req.Dst_id)
|
||||
|
||||
ocsRsp := getOcsRsp(&req, port)
|
||||
if ocsRsp == nil {
|
||||
rsp.AuthCodeRsp.Message = "ocs rsp timeout"
|
||||
sendAuthCodeRsp(w, http.StatusInternalServerError, pRsp)
|
||||
} else {
|
||||
sendAuthCodeRsp(w, http.StatusOK, ocsRsp)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func query_userdataHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rsp := RestRsp{MsgType: REST_QUERY_USERDATA_RSP}
|
||||
var pRsp *RestRsp = &rsp
|
||||
if r.Body == nil {
|
||||
rsp.QueryUserDataRsp.Message = "request body missing"
|
||||
sendQueryUserDataRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
var req RestReq
|
||||
req.MsgType = REST_QUERY_USERDATA_REQ
|
||||
err := json.NewDecoder(r.Body).Decode(&req.QueryUserDataReq)
|
||||
if err != nil {
|
||||
rsp.QueryUserDataRsp.Message = "err decode QueryUserDataReq"
|
||||
sendQueryUserDataRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Got query_userdata request: %v", req.QueryUserDataReq)
|
||||
|
||||
// handle ==========================================
|
||||
port := AssignPort(&req)
|
||||
if port == nil {
|
||||
rsp.QueryUserDataRsp.Message = "err port full"
|
||||
sendQueryUserDataRsp(w, http.StatusInternalServerError, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Assign port for query_userdata request, src[%d], dst[%d]", req.Src_id, req.Dst_id)
|
||||
|
||||
ocsRsp := getOcsRsp(&req, port)
|
||||
if ocsRsp == nil {
|
||||
rsp.QueryUserDataRsp.Message = "ocs rsp timeout"
|
||||
sendQueryUserDataRsp(w, http.StatusInternalServerError, pRsp)
|
||||
} else {
|
||||
sendQueryUserDataRsp(w, http.StatusOK, ocsRsp)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func bundle_subsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rsp := RestRsp{MsgType: REST_BUNDLE_SUBS_RSP}
|
||||
var pRsp *RestRsp = &rsp
|
||||
if r.Body == nil {
|
||||
rsp.BundleSubsRsp.Message = "request body missing"
|
||||
sendBundleSubsRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
var req RestReq
|
||||
req.MsgType = REST_BUNDLE_SUBS_REQ
|
||||
err := json.NewDecoder(r.Body).Decode(&req.BundleSubsReq)
|
||||
if err != nil {
|
||||
rsp.BundleSubsRsp.Message = "err decode BundleSubsReq"
|
||||
sendBundleSubsRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Got BundleSubs request: %v", req.BundleSubsReq)
|
||||
|
||||
// handle ==========================================
|
||||
port := AssignPort(&req)
|
||||
if port == nil {
|
||||
rsp.BundleSubsRsp.Message = "err port full"
|
||||
sendBundleSubsRsp(w, http.StatusInternalServerError, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Assign port for BundleSubs request, src[%d], dst[%d]", req.Src_id, req.Dst_id)
|
||||
|
||||
ocsRsp := getOcsRsp(&req, port)
|
||||
if ocsRsp == nil {
|
||||
rsp.BundleSubsRsp.Message = "ocs rsp timeout"
|
||||
sendBundleSubsRsp(w, http.StatusInternalServerError, pRsp)
|
||||
} else {
|
||||
sendBundleSubsRsp(w, http.StatusOK, ocsRsp)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func rechargeHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rsp := RestRsp{MsgType: REST_RECHARGE_RSP}
|
||||
var pRsp *RestRsp = &rsp
|
||||
if r.Body == nil {
|
||||
rsp.RechargeRsp.Message = "request body missing"
|
||||
sendRechargeRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
var req RestReq
|
||||
req.MsgType = REST_RECHARGE_REQ
|
||||
err := json.NewDecoder(r.Body).Decode(&req.RechargeReq)
|
||||
if err != nil {
|
||||
rsp.RechargeRsp.Message = "err decode RechargeReq"
|
||||
sendRechargeRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Got query_userdata request: %v", req.RechargeReq)
|
||||
|
||||
// handle ==========================================
|
||||
port := AssignPort(&req)
|
||||
if port == nil {
|
||||
rsp.RechargeRsp.Message = "err port full"
|
||||
sendRechargeRsp(w, http.StatusInternalServerError, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Assign port for query_userdata request, src[%d], dst[%d]", req.Src_id, req.Dst_id)
|
||||
|
||||
ocsRsp := getOcsRsp(&req, port)
|
||||
if ocsRsp == nil {
|
||||
rsp.RechargeRsp.Message = "ocs rsp timeout"
|
||||
sendRechargeRsp(w, http.StatusInternalServerError, pRsp)
|
||||
} else {
|
||||
sendRechargeRsp(w, http.StatusOK, ocsRsp)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func transferHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rsp := RestRsp{MsgType: REST_TRANSFER_RSP}
|
||||
var pRsp *RestRsp = &rsp
|
||||
if r.Body == nil {
|
||||
rsp.TransferRsp.Message = "request body missing"
|
||||
sendTransferRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
var req RestReq
|
||||
req.MsgType = REST_TRANSFER_REQ
|
||||
err := json.NewDecoder(r.Body).Decode(&req.TransferReq)
|
||||
if err != nil {
|
||||
rsp.TransferRsp.Message = "err decode TransferReq"
|
||||
sendTransferRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Got Transfer request: %v", req.TransferReq)
|
||||
|
||||
// handle ==========================================
|
||||
port := AssignPort(&req)
|
||||
if port == nil {
|
||||
rsp.TransferRsp.Message = "err port full"
|
||||
sendTransferRsp(w, http.StatusInternalServerError, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Assign port for Transfer request, src[%d], dst[%d]", req.Src_id, req.Dst_id)
|
||||
|
||||
ocsRsp := getOcsRsp(&req, port)
|
||||
if ocsRsp == nil {
|
||||
rsp.TransferRsp.Message = "ocs rsp timeout"
|
||||
sendTransferRsp(w, http.StatusInternalServerError, pRsp)
|
||||
} else {
|
||||
sendTransferRsp(w, http.StatusOK, ocsRsp)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func query_balanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rsp := RestRsp{MsgType: REST_QUERY_BALANCE_RSP}
|
||||
var pRsp *RestRsp = &rsp
|
||||
if r.Body == nil {
|
||||
rsp.QueryBalanceRsp.Message = "request body missing"
|
||||
sendQueryBalanceRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
var req RestReq
|
||||
req.MsgType = REST_QUERY_BALANCE_REQ
|
||||
err := json.NewDecoder(r.Body).Decode(&req.QueryBalanceReq)
|
||||
if err != nil {
|
||||
rsp.QueryBalanceRsp.Message = "err decode QueryBalanceReq"
|
||||
sendQueryBalanceRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Got QueryBalance request: %v", req.QueryBalanceReq)
|
||||
|
||||
// handle ==========================================
|
||||
port := AssignPort(&req)
|
||||
if port == nil {
|
||||
rsp.QueryBalanceRsp.Message = "err port full"
|
||||
sendQueryBalanceRsp(w, http.StatusInternalServerError, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Assign port for QueryBalance request, src[%d], dst[%d]", req.Src_id, req.Dst_id)
|
||||
|
||||
ocsRsp := getOcsRsp(&req, port)
|
||||
if ocsRsp == nil {
|
||||
rsp.QueryBalanceRsp.Message = "ocs rsp timeout"
|
||||
sendQueryBalanceRsp(w, http.StatusInternalServerError, pRsp)
|
||||
} else {
|
||||
sendQueryBalanceRsp(w, http.StatusOK, ocsRsp)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func openPackageHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rsp := RestRsp{MsgType: REST_CRM_CREATE_ACCT_RES}
|
||||
var pRsp *RestRsp = &rsp
|
||||
if r.Body == nil {
|
||||
rsp.CreateAccountRsp.Message = "request body missing"
|
||||
sendCreateAccountRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
var req RestReq
|
||||
req.MsgType = REST_CRM_CREATE_ACCT_REQ
|
||||
err := json.NewDecoder(r.Body).Decode(&req.CreateAccountReq)
|
||||
if err != nil {
|
||||
rsp.CreateAccountRsp.Message = "err decode CreateAccountReq"
|
||||
sendCreateAccountRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Got CreateAccount request: %v", req.CreateAccountReq)
|
||||
|
||||
// handle ==========================================
|
||||
port := AssignPort(&req)
|
||||
if port == nil {
|
||||
rsp.CreateAccountRsp.Message = "err port full"
|
||||
sendCreateAccountRsp(w, http.StatusInternalServerError, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Assign port for CreateAccount request, src[%d], dst[%d]", req.Src_id, req.Dst_id)
|
||||
|
||||
ocsRsp := getOcsRsp(&req, port)
|
||||
if ocsRsp == nil {
|
||||
rsp.CreateAccountRsp.Message = "ocs rsp timeout"
|
||||
sendCreateAccountRsp(w, http.StatusInternalServerError, pRsp)
|
||||
} else {
|
||||
sendCreateAccountRsp(w, http.StatusOK, ocsRsp)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func updateSubsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rsp := RestRsp{MsgType: REST_CRM_UPDATE_SUBS_RES}
|
||||
var pRsp *RestRsp = &rsp
|
||||
if r.Body == nil {
|
||||
rsp.UpdateSubsRsp.Message = "request body missing"
|
||||
sendUpdateSubsRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
var req RestReq
|
||||
req.MsgType = REST_CRM_UPDATE_SUBS_REQ
|
||||
err := json.NewDecoder(r.Body).Decode(&req.UpdateSubsReq)
|
||||
if err != nil {
|
||||
rsp.UpdateSubsRsp.Message = "err decode UpdateSubsReq"
|
||||
sendUpdateSubsRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Got UpdateSubs request: %v", req.UpdateSubsReq)
|
||||
|
||||
// handle ==========================================
|
||||
port := AssignPort(&req)
|
||||
if port == nil {
|
||||
rsp.UpdateSubsRsp.Message = "err port full"
|
||||
sendUpdateSubsRsp(w, http.StatusInternalServerError, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Assign port for UpdateSubs request, src[%d], dst[%d]", req.Src_id, req.Dst_id)
|
||||
|
||||
ocsRsp := getOcsRsp(&req, port)
|
||||
if ocsRsp == nil {
|
||||
rsp.UpdateSubsRsp.Message = "ocs rsp timeout"
|
||||
sendUpdateSubsRsp(w, http.StatusInternalServerError, pRsp)
|
||||
} else {
|
||||
sendUpdateSubsRsp(w, http.StatusOK, ocsRsp)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func deleteSubsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rsp := RestRsp{MsgType: REST_CRM_DELETE_SUBS_RES}
|
||||
var pRsp *RestRsp = &rsp
|
||||
if r.Body == nil {
|
||||
rsp.DeleteSubsRsp.Message = "request body missing"
|
||||
sendDeleteSubsRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
var req RestReq
|
||||
req.MsgType = REST_CRM_DELETE_SUBS_REQ
|
||||
err := json.NewDecoder(r.Body).Decode(&req.DeleteSubsReq)
|
||||
if err != nil {
|
||||
rsp.DeleteSubsRsp.Message = "err decode DeleteSubsReq"
|
||||
sendDeleteSubsRsp(w, http.StatusBadRequest, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Got DeleteSubs request: %v", req.DeleteSubsReq)
|
||||
|
||||
mysql.CrmDeleteSubsProfile(req.DeleteSubsReq.TelNumber, req.DeleteSubsReq.AcctType, req.DeleteSubsReq.AcctId)
|
||||
if req.DeleteSubsReq.AcctType != "1" {// not mobile
|
||||
pRsp.DeleteSubsRsp.Result = 0
|
||||
pRsp.DeleteSubsRsp.ErrorCode = 2001
|
||||
sendDeleteSubsRsp(w, http.StatusOK, pRsp)
|
||||
return
|
||||
}
|
||||
|
||||
// handle ==========================================
|
||||
port := AssignPort(&req)
|
||||
if port == nil {
|
||||
rsp.DeleteSubsRsp.Message = "err port full"
|
||||
sendDeleteSubsRsp(w, http.StatusInternalServerError, pRsp)
|
||||
return
|
||||
}
|
||||
l4g.RestLog.Debugf("Assign port for DeleteSubs request, src[%d], dst[%d]", req.Src_id, req.Dst_id)
|
||||
|
||||
ocsRsp := getOcsRsp(&req, port)
|
||||
if ocsRsp == nil {
|
||||
rsp.DeleteSubsRsp.Message = "ocs rsp timeout"
|
||||
sendDeleteSubsRsp(w, http.StatusInternalServerError, pRsp)
|
||||
} else {
|
||||
sendDeleteSubsRsp(w, http.StatusOK, ocsRsp)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func getOcsRsp(req *RestReq, port *Port) (*RestRsp) {
|
||||
c := make(chan RestRsp)
|
||||
//port.Rsp = make(chan RestRsp)
|
||||
port.Rsp = c
|
||||
|
||||
go SendOcsUdpReq(req)
|
||||
|
||||
defer ReleasePort(req.Src_id)
|
||||
|
||||
timeout := time.After(5 * time.Second)
|
||||
select {
|
||||
case rsp, ok := <-c:
|
||||
if !ok {// chan closed
|
||||
l4g.RestLog.Warnf("chan getOcsRsp closed by other!")
|
||||
return nil
|
||||
} else {
|
||||
close(c)
|
||||
l4g.RestLog.Debugf("getOcsRsp succ, close chan.")
|
||||
return &rsp
|
||||
}
|
||||
case <-timeout:
|
||||
l4g.RestLog.Warnf("chan getOcsRsp timeout, close chan!")
|
||||
close(c)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user