Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 4.11 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "database/sql"
  6.     "encoding/json"
  7.     "fmt"
  8.     _ "github.com/go-sql-driver/mysql"
  9.     "github.com/zaf/agi"
  10.     "log"
  11.     "net"
  12.     "os"
  13.     "path/filepath"
  14.  
  15. )
  16.  
  17. //Config для аги и базы
  18. type Config struct {
  19.     Agi struct {
  20.         IP   string `json:"ip"`
  21.         Port string `json:"port"`
  22.         Prot string `json:"prot"`
  23.     } `json:"agi"`
  24.     Database struct {
  25.         User string `json:"user"`
  26.         Pass string `json:"pass"`
  27.         Host string `json:"host"`
  28.         Name string `json:"cdr"`
  29.     } `json:"database"`
  30. }
  31.  
  32. type Call struct {
  33.     ID       string `db:"id"`
  34.     Name     string `db:"name"`
  35.     Contract string `db:"id_contract"`
  36.     Callerid string `db:"callerid"`
  37. }
  38. type Person struct {
  39.     ID string `db:"id"`
  40.     Name string `db:"name"`
  41.     Contract string `db:"id_contract"`
  42.     Callerid string `db:"callerid"`
  43. }
  44.  
  45. var (
  46.     config Config
  47.     db     *sql.DB
  48. )
  49.  
  50. //Conf Загружаем файл с настройками
  51. func Conf() {
  52.     dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
  53.     if err != nil {
  54.         panic(err)
  55.     }
  56.     configFile, err := os.Open(dir + "/config.json")
  57.     if err != nil {
  58.         log.Printf("Конфиг не найден")
  59.         panic(err)
  60.     }
  61.     jsonParser := json.NewDecoder(configFile)
  62.     err = jsonParser.Decode(&config)
  63.     if err != nil {
  64.         log.Printf("Ошибка JSON(89)%v\n", err)
  65.     }
  66.     defer func() {
  67.         if err := configFile.Close(); err != nil {
  68.             log.Printf("Ошибка defer%v\n", err)
  69.         }
  70.     }()
  71. }
  72.  
  73. func main() {
  74.     dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
  75.     if err != nil {
  76.         panic(err)
  77.     }
  78.     //Настройки записи логов
  79.     f, err := os.OpenFile(dir+"/make.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600)
  80.     if err != nil {
  81.         fmt.Println("error opening file:", err)
  82.     }
  83.     defer func() {
  84.         if err = f.Close(); err != nil {
  85.             panic(err)
  86.         }
  87.     }()
  88.     log.SetOutput(f)
  89.  
  90.     Conf()
  91.  
  92.     //Подключение к DB
  93.     db, err = sql.Open("mysql", config.Database.User+":"+config.Database.Pass+"@tcp("+config.Database.Host+")/"+config.Database.Name)
  94.     //db, err = sql.Open("mysql", "root:cbcflvby@tcp(95.141.192.21:3306)/callerid")
  95.     if err != nil {
  96.         log.Println("Ошибка подключения к DB ", err)
  97.         panic(err)
  98.     }
  99.     if err = db.Ping(); err != nil {
  100.         log.Println("Ping DB ", err)
  101.     }
  102.     //defer db.Close()
  103.     defer func() {
  104.         if err = db.Close(); err != nil {
  105.             panic(err)
  106.         }
  107.     }()
  108.  
  109.     // If started as a FastAGI server create a listener on port 4573
  110.     // and start a new goroutine for each connection.
  111.     ln, err := net.Listen(config.Agi.Prot, config.Agi.IP+":"+config.Agi.Port)
  112.     if err != nil {
  113.         log.Fatal(err)
  114.     }
  115.     log.Printf("Listening for FastAGI connections on %s:%[2]s", config.Agi.IP, config.Agi.Port)
  116.     //defer ln.Close()
  117.     defer func() {
  118.         if err := ln.Close(); err != nil {
  119.             panic(err)
  120.         }
  121.     }()
  122.     for {
  123.         conn, err := ln.Accept()
  124.         if err != nil {
  125.             log.Println(err)
  126.             continue
  127.         }
  128.         go spawnAgi(conn)
  129.     }
  130. }
  131.  
  132. // Start the AGI or FastAGI session.
  133. func spawnAgi(c net.Conn) {
  134.     myAgi := agi.New()
  135.     var err error
  136.     if c != nil {
  137.         // Create a new FastAGI session.
  138.         rw := bufio.NewReadWriter(bufio.NewReader(c), bufio.NewWriter(c))
  139.         err = myAgi.Init(rw)
  140.         //defer c.Close()
  141.         defer func() {
  142.             if err = c.Close(); err != nil {
  143.                 panic(err)
  144.             }
  145.         }()
  146.     } else {
  147.         // Create a new AGI session.
  148.         err = myAgi.Init(nil)
  149.     }
  150.     if err != nil {
  151.         log.Printf("Error Parsing AGI environment: %v\n", err)
  152.         return
  153.     }
  154.     COD(myAgi)
  155. }
  156.  
  157. func COD(sess *agi.Session) {
  158.  
  159.     var cid string
  160.  
  161.     peer := sess.Env["callerid"]
  162.     contract := sess.Env["arg_1"]
  163.    
  164.     rows, err := db.Query(`select * from callerid where id_contract=?`, contract)
  165.  
  166.         log.Printf("PEER111111 %v\n", peer)
  167.     for rows.Next() {
  168.         var c Call
  169.  
  170.         if err = rows.Scan(&c.ID, &c.Name, &c.Contract, &c.Callerid); err != nil {
  171.             log.Printf("Ошибка переменных %v\n", err)
  172.             return
  173.         }/
  174.         switch c.Name {
  175.         case peer:
  176.             cid = c.Callerid
  177.             break
  178.         case "all":
  179.             cid = c.Callerid
  180.         }
  181.  
  182.        
  183.             _, err = sess.SetVariable("CALLERID(all)", cid)
  184.             if err != nil {
  185.                 log.Printf("Ошибка переменной callerid %v:%[2]s\n", err, cid)
  186.             }
  187.  
  188.  
  189.     }
  190.  
  191.  
  192.  
  193.     defer rows.Close()
  194.  
  195.  
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement