PHP code example of rtckit / sip
1. Go to this page and download the library: Download rtckit/sip library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
rtckit / sip example snippets
/*
* $text holds your SIP message as a string, for example
* $text = 'REGISTER sip:192.168.0.1 SIP/2.0 /.../';
*/
$message = \RTCKit\SIP\Message::parse($text);
/* Outputs "RTCKit\SIP\Request" */
echo get_class($message) . PHP_EOL;
/* Outputs something similar to:
* Protocol version: SIP/2.0
* Request method: REGISTER
* Request URI: sip:192.168.0.1
* Via: 192.168.0.2:5050
* Via branch: z9hG4bK.eAV4o0nXr
* From scheme: sip
* From user: buzz
* From host: 192.168.0.1
* From tag: SFJbQ2oWh
* To scheme: sip
* To user: buzz
* To host: 192.168.0.1
* Sequence number: 20
* Call ID: ob0EYyuyC0
*/
printf("Protocol version: %s" . PHP_EOL, $message->version);
printf("Request method: %s" . PHP_EOL, $message->method);
printf("Request URI: %s" . PHP_EOL, $message->uri);
printf("Via: %s" . PHP_EOL, $message->via->values[0]->host);
printf("Via branch: %s" . PHP_EOL, $message->via->values[0]->branch);
printf("From scheme: %s" . PHP_EOL, $request->from->uri->scheme);
printf("From user: %s" . PHP_EOL, $request->from->uri->user);
printf("From host: %s" . PHP_EOL, $request->from->uri->host);
printf("From tag: %s" . PHP_EOL, $request->from->tag);
printf("To scheme: %s" . PHP_EOL, $request->to->uri->scheme);
printf("To user: %s" . PHP_EOL, $request->to->uri->user);
printf("To host: %s" . PHP_EOL, $request->to->uri->host);
printf("Sequence number: %s" . PHP_EOL, $message->cSeq->sequence);
printf("Call ID: %s" . PHP_EOL, $message->callId->value);
$response = new \RTCKit\SIP\Response;
$response->version = 'SIP/2.0';
$response->code = 200;
$response->via = new \RTCKit\SIP\Header\ViaHeader;
$response->via->values[0] = new \RTCKit\SIP\Header\ViaValue;
$response->via->values[0]->protocol = 'SIP';
$response->via->values[0]->version = '2.0';
$response->via->values[0]->transport = 'UDP';
$response->via->values[0]->host = '192.168.0.2:5050';
$response->via->values[0]->branch = 'z9hG4bK.eAV4o0nXr';
$response->from = new \RTCKit\SIP\Header\NameAddrHeader;
$response->from->uri = new \RTCKit\SIP\URI;
$response->from->uri->scheme = 'sip';
$response->from->uri->user = 'buzz';
$response->from->uri->host = '192.168.0.1';
$response->from->tag = 'SFJbQ2oWh';
$response->to = new \RTCKit\SIP\Header\NameAddrHeader;
$response->to->uri = new \RTCKit\SIP\URI;
$response->to->uri->scheme = 'sip';
$response->to->uri->user = 'buzz';
$response->to->uri->host = '192.168.0.1';
$response->to->tag = '8cQtUyH6N5N9K';
$response->cSeq = new \RTCKit\SIP\Header\CSeqHeader;
$response->cSeq->sequence = 20;
$response->cSeq->method = 'REGISTER';
$response->callId = new \RTCKit\SIP\Header\CallIdHeader;
$response->callId->value = 'ob0EYyuyC0';
$response->maxForwards = new \RTCKit\SIP\Header\ScalarHeader;
$response->maxForwards->value = 70;
$response->contact = new \RTCKit\SIP\Header\ContactHeader;
$response->contact->values[0] = new \RTCKit\SIP\Header\ContactValue;
$response->contact->values[0]->uri = new \RTCKit\SIP\URI;
$response->contact->values[0]->uri->scheme = 'sip';
$response->contact->values[0]->uri->user = 'buzz';
$response->contact->values[0]->uri->host = '192.168.0.2';
$response->contact->values[0]->uri->port = 5050;
$response->contact->values[0]->uri->transport = 'udp';
$response->contact->values[0]->expires = 3600;
$response->userAgent = new \RTCKit\SIP\Header\Header;
$response->userAgent->values[0] = 'MyDeskPhone/1.0.0';
/* Outputs:
* SIP/2.0 200 OK
* Via: SIP/2.0/UDP 192.168.0.2:5050;branch=z9hG4bK.eAV4o0nXr
* From: <sip:[email protected] >;tag=SFJbQ2oWh
* To: <sip:[email protected] >;tag=8cQtUyH6N5N9K
* Contact: <sip:[email protected] :5050;transport=udp>;expires=3600
* Call-ID: ob0EYyuyC0
* CSeq: 20 REGISTER
* Max-Forwards: 70
* User-Agent: MyDeskPhone/1.0.0
*/
echo $response->render();
/* Instantiate the Stream Parser */
$parser = new \RTCKit\SIP\StreamParser;
$fp = fopen(/.../);
while (!feof($fp)) {
$bytes = fread($fp, 256);
/* The actual input string ($bytes) can be retrieved from any stream-like source */
if ($parser->process($bytes, $messages) === \RTCKit\SIP\StreamParser::SUCCESS) {
foreach ($messages as $message) {
/*
* $message is either a Request or a Response object, using
* the same structure as messages returned by Message::parse()
*/
}
}
}
bash
php -d memory_limit=-1 ./vendor/bin/phpunit -c ./etc/phpunit.xml.dist
sh
php -d memory_limit=-1 ./vendor/bin/phpstan analyse -c ./etc/phpstan.neon -n -vvv --ansi --level=max src
php -d memory_limit=-1 ./vendor/bin/psalm --config=./etc/psalm.xml