Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- "database/sql"
- "encoding/json"
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- "github.com/zaf/agi"
- "log"
- "net"
- "os"
- "path/filepath"
- )
- //Config для аги и базы
- type Config struct {
- Agi struct {
- IP string `json:"ip"`
- Port string `json:"port"`
- Prot string `json:"prot"`
- } `json:"agi"`
- Database struct {
- User string `json:"user"`
- Pass string `json:"pass"`
- Host string `json:"host"`
- Name string `json:"cdr"`
- } `json:"database"`
- }
- type Call struct {
- ID string `db:"id"`
- Name string `db:"name"`
- Contract string `db:"id_contract"`
- Callerid string `db:"callerid"`
- }
- type Person struct {
- ID string `db:"id"`
- Name string `db:"name"`
- Contract string `db:"id_contract"`
- Callerid string `db:"callerid"`
- }
- var (
- config Config
- db *sql.DB
- )
- //Conf Загружаем файл с настройками
- func Conf() {
- dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
- if err != nil {
- panic(err)
- }
- configFile, err := os.Open(dir + "/config.json")
- if err != nil {
- log.Printf("Конфиг не найден")
- panic(err)
- }
- jsonParser := json.NewDecoder(configFile)
- err = jsonParser.Decode(&config)
- if err != nil {
- log.Printf("Ошибка JSON(89)%v\n", err)
- }
- defer func() {
- if err := configFile.Close(); err != nil {
- log.Printf("Ошибка defer%v\n", err)
- }
- }()
- }
- func main() {
- dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
- if err != nil {
- panic(err)
- }
- //Настройки записи логов
- f, err := os.OpenFile(dir+"/make.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600)
- if err != nil {
- fmt.Println("error opening file:", err)
- }
- defer func() {
- if err = f.Close(); err != nil {
- panic(err)
- }
- }()
- log.SetOutput(f)
- Conf()
- //Подключение к DB
- db, err = sql.Open("mysql", config.Database.User+":"+config.Database.Pass+"@tcp("+config.Database.Host+")/"+config.Database.Name)
- //db, err = sql.Open("mysql", "root:cbcflvby@tcp(95.141.192.21:3306)/callerid")
- if err != nil {
- log.Println("Ошибка подключения к DB ", err)
- panic(err)
- }
- if err = db.Ping(); err != nil {
- log.Println("Ping DB ", err)
- }
- //defer db.Close()
- defer func() {
- if err = db.Close(); err != nil {
- panic(err)
- }
- }()
- // If started as a FastAGI server create a listener on port 4573
- // and start a new goroutine for each connection.
- ln, err := net.Listen(config.Agi.Prot, config.Agi.IP+":"+config.Agi.Port)
- if err != nil {
- log.Fatal(err)
- }
- log.Printf("Listening for FastAGI connections on %s:%[2]s", config.Agi.IP, config.Agi.Port)
- //defer ln.Close()
- defer func() {
- if err := ln.Close(); err != nil {
- panic(err)
- }
- }()
- for {
- conn, err := ln.Accept()
- if err != nil {
- log.Println(err)
- continue
- }
- go spawnAgi(conn)
- }
- }
- // Start the AGI or FastAGI session.
- func spawnAgi(c net.Conn) {
- myAgi := agi.New()
- var err error
- if c != nil {
- // Create a new FastAGI session.
- rw := bufio.NewReadWriter(bufio.NewReader(c), bufio.NewWriter(c))
- err = myAgi.Init(rw)
- //defer c.Close()
- defer func() {
- if err = c.Close(); err != nil {
- panic(err)
- }
- }()
- } else {
- // Create a new AGI session.
- err = myAgi.Init(nil)
- }
- if err != nil {
- log.Printf("Error Parsing AGI environment: %v\n", err)
- return
- }
- COD(myAgi)
- }
- func COD(sess *agi.Session) {
- var cid string
- peer := sess.Env["callerid"]
- contract := sess.Env["arg_1"]
- rows, err := db.Query(`select * from callerid where id_contract=?`, contract)
- log.Printf("PEER111111 %v\n", peer)
- for rows.Next() {
- var c Call
- if err = rows.Scan(&c.ID, &c.Name, &c.Contract, &c.Callerid); err != nil {
- log.Printf("Ошибка переменных %v\n", err)
- return
- }/
- switch c.Name {
- case peer:
- cid = c.Callerid
- break
- case "all":
- cid = c.Callerid
- }
- _, err = sess.SetVariable("CALLERID(all)", cid)
- if err != nil {
- log.Printf("Ошибка переменной callerid %v:%[2]s\n", err, cid)
- }
- }
- defer rows.Close()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement