Passed
Push — develop ( fe499f...dd242c )
by Nikolay
05:43 queued 12s
created

SIPStackProcessor::getRegistry()   B

Complexity

Conditions 7
Paths 6

Size

Total Lines 42
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

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