mirror of
https://gitlab.linphone.org/BC/public/flexisip-account-manager.git
synced 2026-01-17 10:08:05 +00:00
Import ReactPHP Socket and required dependencies Add a new configuration variable to define the unix pipe path Generalize the API Key to all the users, add a new endpoint to retrieve it, update the documentation Update the dependencies Update the documentation Complete the tests
50 lines
1.5 KiB
PHP
50 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
|
|
use Illuminate\Validation\ValidationException;
|
|
|
|
class MessageController extends Controller
|
|
{
|
|
public function send(Request $request)
|
|
{
|
|
$request->validate([
|
|
'to' => 'required',
|
|
'body' => 'required'
|
|
]);
|
|
|
|
$returnedLines = [];
|
|
|
|
$loop = \React\EventLoop\Loop::get();
|
|
$connector = new \React\Socket\UnixConnector($loop);
|
|
|
|
$connector->connect('unix://'.config('app.linphone_daemon_unix_pipe'))
|
|
->then(function (\React\Socket\Connection $connection) use ($request, &$returnedLines) {
|
|
|
|
$connection->on('data', function ($message) use ($connection, &$returnedLines) {
|
|
foreach (preg_split("/\r\n|\n|\r/", $message) as $line) {
|
|
if(!empty($line) && false !== ($matches = explode(':', $line, 2))) {
|
|
$returnedLines["{$matches[0]}"] = trim($matches[1]);
|
|
}
|
|
}
|
|
|
|
$connection->close();
|
|
});
|
|
|
|
$connection->write("message sip:".$request->get('to')." ".$request->get('body')."\n");
|
|
});
|
|
|
|
$loop->run();
|
|
|
|
if ($returnedLines['Status'] == 'Error') {
|
|
throw ValidationException::withMessages([$returnedLines['Reason']]);
|
|
}
|
|
|
|
if ($returnedLines['Status'] == 'Ok') {
|
|
return response()->json(['id' => $returnedLines['Id']]);
|
|
}
|
|
}
|
|
}
|