Passed
Push — develop ( eb8832...f8f730 )
by Nikolay
05:34
created

SIPStackProcessor::callBack()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 25
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 19
c 0
b 0
f 0
dl 0
loc 25
rs 9.6333
cc 4
nc 4
nop 1
1
<?php
2
/*
3
 * Copyright © MIKO LLC - All Rights Reserved
4
 * Unauthorized copying of this file, via any medium is strictly prohibited
5
 * Proprietary and confidential
6
 * Written by Alexey Portnov, 9 2020
7
 */
8
9
namespace MikoPBX\PBXCoreREST\Lib;
10
11
12
use MikoPBX\Common\Models\Sip;
13
use MikoPBX\Core\System\Util;
14
use Phalcon\Di\Injectable;
15
16
class SIPStackProcessor extends Injectable
17
{
18
    /**
19
     * Processes SIP requests
20
     *
21
     * @param array $request
22
     *
23
     * @return \MikoPBX\PBXCoreREST\Lib\PBXApiResult
24
     */
25
    public static function callBack(array $request): PBXApiResult
26
    {
27
        $action = $request['action'];
28
        $data   = $request['data'];
29
30
        switch ($action) {
31
            case 'getPeersStatuses':
32
                $res = self::getPeersStatuses();
33
                break;
34
            case 'getSipPeer':
35
                $res = self::getPeerStatus($data['peer']);
36
                break;
37
            case 'getRegistry':
38
                $res = self::getRegistry();
39
                break;
40
            default:
41
                $res             = new PBXApiResult();
42
                $res->processor = __METHOD__;
43
                $res->messages[] = "Unknown action - {$action} in sipCallBack";
44
                break;
45
        }
46
47
        $res->function = $action;
48
49
        return $res;
50
    }
51
52
    /**
53
     * Получение статусов SIP пиров.
54
     *
55
     * @return PBXApiResult
56
     */
57
    public static function getPeersStatuses(): PBXApiResult
58
    {
59
        $am     = Util::getAstManager('off');
60
        $peers  = $am->getPjSipPeers();
61
62
        $res = new PBXApiResult();
63
        $res->processor = __METHOD__;
64
        $res->success = true;
65
        $res->data = $peers;
66
        return $res;
67
    }
68
69
    /**
70
     * Gets peer status
71
     *
72
     * @param $peer
73
     *
74
     * @return PBXApiResult
75
     */
76
    public static function getPeerStatus($peer): PBXApiResult
77
    {
78
        $am = Util::getAstManager('off');
79
        $peers = $am->getPjSipPeer($peer);
80
81
        $res = new PBXApiResult();
82
        $res->processor = __METHOD__;
83
        $res->success = true;
84
        $res->data = $peers;
85
        return $res;
86
    }
87
88
    /**
89
     * Ger SIP Registry status
90
     *
91
     * @return PBXApiResult
92
     */
93
    public static function getRegistry(): PBXApiResult
94
    {
95
        $res = new PBXApiResult();
96
        $res->processor = __METHOD__;
97
        $am         = Util::getAstManager('off');
98
        $peers      = $am->getPjSipRegistry();
99
        $providers  = Sip::find("type = 'friend'");
100
        foreach ($providers as $provider) {
101
            if ($provider->disabled === '1') {
102
                $peers[] = [
103
                    'state'    => 'OFF',
104
                    'id'       => $provider->uniqid,
105
                    'username' => $provider->username,
106
                    'host'     => $provider->host,
107
                ];
108
                continue;
109
            }
110
            if ($provider->noregister === '1') {
111
                $peers_status = $am->getPjSipPeer($provider->uniqid);
112
                $peers[] = [
113
                    'state'    => $peers_status['state'],
114
                    'id'       => $provider->uniqid,
115
                    'username' => $provider->username,
116
                    'host'     => $provider->host,
117
                ];
118
                continue;
119
            }
120
            foreach ($peers as &$peer) {
121
                if(!empty($peer['id'])){
122
                    continue;
123
                }
124
                if ($peer['host'] !== $provider->host || $peer['username'] !== $provider->username) {
125
                    continue;
126
                }
127
                $peer['id'] = $provider->uniqid;
128
            }
129
            unset($peer);
130
        }
131
        $res->data = $peers;
132
        $res->success = true;
133
        $res->processor = __METHOD__;
134
        return $res;
135
    }
136
}