Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/src/Config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ load(dst, src) {

// Check Optional parameters.
checks.optional.forEach((parameter, fun) {
logger.info('Check optional parameter => ${parameter}.');
logger.debug('Check optional parameter => ${parameter}.');
fun(src, dst);
});
} catch (e) {
Expand Down
3 changes: 2 additions & 1 deletion lib/src/Dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'Dialog/RequestSender.dart';
import 'Exceptions.dart' as Exceptions;
import 'RTCSession.dart';
import 'SIPMessage.dart' as SIPMessage;
import 'SIPMessage.dart';
import 'UA.dart';
import 'Utils.dart' as Utils;
import 'event_manager/event_manager.dart';
Expand Down Expand Up @@ -165,7 +166,7 @@ class Dialog {
return request;
}

receiveRequest(request) {
receiveRequest(IncomingRequest request) {
// Check in-dialog request.
if (!this._checkInDialogRequest(request)) {
return;
Expand Down
2 changes: 1 addition & 1 deletion lib/src/Parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ getHeader(String data, int headerStart) {
return end;
}

parseHeader(message, data, headerStart, headerEnd) {
parseHeader(IncomingMessage message, data, headerStart, headerEnd) {
var parsed;
var hcolonIndex = data.indexOf(':', headerStart);
var headerName = data.substring(headerStart, hcolonIndex).trim();
Expand Down
2 changes: 1 addition & 1 deletion lib/src/RTCSession.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1760,7 +1760,7 @@ class RTCSession extends EventManager {
/**
* In dialog UPDATE Reception
*/
void _receiveUpdate(request) async {
void _receiveUpdate(IncomingRequest request) async {
logger.debug('receiveUpdate()');

var rejected = false;
Expand Down
16 changes: 12 additions & 4 deletions lib/src/SIPMessage.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import 'Grammar.dart';
import 'NameAddrHeader.dart';
import 'UA.dart';
import 'Utils.dart' as Utils;
import 'grammar_parser.dart';
import 'logger.dart';
import 'transactions/transaction_base.dart';

final logger = Log();

Expand Down Expand Up @@ -343,9 +345,12 @@ class IncomingMessage {
var reason_phrase;
var session_expires;
var session_expires_refresher;
Data event;
dynamic replaces;
dynamic refer_to;

IncomingMessage() {
this.data = null;
this.data = '';
this.headers = null;
this.method = null;
this.via = null;
Expand All @@ -356,7 +361,7 @@ class IncomingMessage {
this.from_tag = null;
this.to = null;
this.to_tag = null;
this.body = null;
this.body = '';
this.sdp = null;
}

Expand Down Expand Up @@ -505,7 +510,7 @@ class IncomingRequest extends IncomingMessage {
UA ua;
var ruri;
var transport;
var server_transaction;
TransactionBase server_transaction;

IncomingRequest(UA ua) : super() {
this.ua = ua;
Expand Down Expand Up @@ -623,9 +628,12 @@ class IncomingRequest extends IncomingMessage {
response += 'Content-Length: ${0}\r\n\r\n';
}

IncomingMessage message = IncomingMessage();
message.data = response;

this
.server_transaction
.receiveResponse(code, response, onSuccess, onFailure);
.receiveResponse(code, message, onSuccess, onFailure);
}

/**
Expand Down
17 changes: 11 additions & 6 deletions lib/src/UA.dart
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class UA extends EventManager {
TransactionBag _transactions = TransactionBag();
var _data;
var _closeTimer;
var _registrator;
Registrator _registrator;
final logger = new Log();

UA(Settings configuration) {
Expand Down Expand Up @@ -299,8 +299,13 @@ class UA extends EventManager {
if (this._sessions.containsKey(session)) {
logger.debug('closing session ${session}');
try {
this._sessions[session].terminate();
} catch (error) {}
RTCSession rtcSession = this._sessions[session];
if (!rtcSession.isEnded()) {
rtcSession.terminate();
}
} catch (error, s) {
Log.e(error.toString(), null, s);
}
}
});

Expand Down Expand Up @@ -487,7 +492,7 @@ class UA extends EventManager {
/**
* Request reception
*/
receiveRequest(request) {
receiveRequest(IncomingRequest request) {
SipMethod method = request.method;

// Check that request URI points to us.
Expand Down Expand Up @@ -892,7 +897,7 @@ class UA extends EventManager {
._transactions
.getTransaction(InviteClientTransaction, message.via_branch);
if (transaction != null) {
transaction.receiveResponse(message);
transaction.receiveResponse(message.status_code, message);
}
break;
case SipMethod.ACK:
Expand All @@ -903,7 +908,7 @@ class UA extends EventManager {
._transactions
.getTransaction(NonInviteClientTransaction, message.via_branch);
if (transaction != null) {
transaction.receiveResponse(message);
transaction.receiveResponse(message.status_code, message);
}
break;
}
Expand Down
4 changes: 3 additions & 1 deletion lib/src/WebSocketInterface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,10 @@ class WebSocketInterface implements Socket {
});
_closed = false;
_connected = true;
logger.debug("Web Socket is now connected");
this._onOpen();
} catch (e) {
} catch (e, s) {
Log.e(e.toString(), null, s);
_connected = false;
this._onError(e.toString());
}
Expand Down
4 changes: 2 additions & 2 deletions lib/src/event_manager/events.dart
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class EventUnregister extends EventType {

class EventSipEvent extends EventType {
//OutgoingRequest request;
EventSipEvent({OutgoingRequest request});
EventSipEvent({IncomingRequest request});
}

class EventConnected extends EventType {
Expand Down Expand Up @@ -175,7 +175,7 @@ class EventUpdate extends EventType {
// bool Function(dynamic options) callback;
// bool Function(dynamic options) reject;
EventUpdate(
{dynamic request,
{IncomingRequest request,
bool Function(dynamic options) callback,
bool Function(dynamic options) reject});
}
Expand Down
24 changes: 15 additions & 9 deletions lib/src/logger.dart
Original file line number Diff line number Diff line change
@@ -1,39 +1,40 @@
import 'package:intl/intl.dart';
import 'package:logger/logger.dart';

import 'enum_helper.dart';
import 'stack_trace_nj.dart';

class Log extends Logger {
static Log _self;
static String _localPath;

static Level _loggingLevel = Level.debug;

Log();

static set loggingLevel(Level loggingLevel) => _loggingLevel = loggingLevel;

Log._internal(String currentWorkingDirectory)
: super(printer: MyLogPrinter(currentWorkingDirectory));

debug(String message, [dynamic error, StackTrace stackTrace]) {
void debug(String message, [dynamic error, StackTrace stackTrace]) {
autoInit();
Log.d(message, error, stackTrace);
return _self;
}

info(String message, [dynamic error, StackTrace stackTrace]) {
void info(String message, [dynamic error, StackTrace stackTrace]) {
autoInit();
Log.i(message, error, stackTrace);
return _self;
}

warn(String message, [dynamic error, StackTrace stackTrace]) {
void warn(String message, [dynamic error, StackTrace stackTrace]) {
autoInit();
Log.w(message, error, stackTrace);
return _self;
}

error(String message, [dynamic error, StackTrace stackTrace]) {
void error(String message, [dynamic error, StackTrace stackTrace]) {
autoInit();
Log.e(message, error, stackTrace);
return _self;
}

factory Log.d(String message, [dynamic error, StackTrace stackTrace]) {
Expand Down Expand Up @@ -80,7 +81,7 @@ class Log extends Logger {
}

class MyLogPrinter extends LogPrinter {
static final levelColors = {
static final Map<Level, AnsiColor> levelColors = {
Level.verbose: AnsiColor.fg(AnsiColor.grey(0.5)),
Level.debug: AnsiColor.none(),
Level.info: AnsiColor.fg(12),
Expand All @@ -96,6 +97,11 @@ class MyLogPrinter extends LogPrinter {

@override
void log(LogEvent event) {
if (EnumHelper.getIndexOf(Level.values, Log._loggingLevel) >
EnumHelper.getIndexOf(Level.values, event.level)) {
// don't log events where the log level is set higher
return;
}
var formatter = DateFormat('yyyy-MM-dd HH:mm:ss.');
var now = DateTime.now();
var formattedDate = formatter.format(now) + now.millisecond.toString();
Expand Down
31 changes: 28 additions & 3 deletions lib/src/sip_ua_helper.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'dart:async';
import 'package:flutter_webrtc/media_stream.dart';
import 'package:logger/logger.dart';

import 'Config.dart';
import 'Message.dart';
Expand All @@ -25,6 +26,12 @@ class SIPUAHelper extends EventManager {

RegistrationStateEnum get registerState => _registerState;

SIPUAHelper() {
Log.loggingLevel = Level.debug;
}

set loggingLevel(Level loggingLevel) => Log.loggingLevel = loggingLevel;

String get remote_identity {
if (_session != null && _session.remote_identity != null) {
if (_session.remote_identity.display_name != null) {
Expand All @@ -47,15 +54,33 @@ class SIPUAHelper extends EventManager {
}

void stop() async {
await this._ua.stop();
if (this._ua != null) {
await this._ua.stop();
} else {
Log.w("ERROR: stop called but not started, call start first.");
}
}

void register() {
assert(this._ua != null,
"register called but not started, you must call start first.");
this._ua.register();
}

bool isRegistered() {
if (this._ua != null) {
return this._ua.isRegistered();
}
return false;
}

void unregister([bool all = true]) {
this._ua.unregister(all: all);
if (this._ua != null) {
assert(!this._ua.isRegistered(), "ERROR: you must call register first.");
this._ua.unregister(all: all);
} else {
Log.e("ERROR: unregister called, you must call start first.");
}
}

Future<RTCSession> call(String uri, [bool voiceonly = false]) async {
Expand Down Expand Up @@ -135,7 +160,7 @@ class SIPUAHelper extends EventManager {
});

this._ua.on(EventRegistrationFailed(), (EventRegistrationFailed event) {
logger.debug('registrationFailed => ' + (event.cause));
logger.error('registrationFailed => ' + (event.cause));
_registerState = RegistrationStateEnum
.REGISTRATION_FAILED; //'registrationFailed[${event.cause}]';
_registered = false;
Expand Down
4 changes: 3 additions & 1 deletion lib/src/transactions/invite_client.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import '../../sip_ua.dart';
import '../Constants.dart';
import '../SIPMessage.dart' as SIPMessage;
import '../SIPMessage.dart';
import '../Timers.dart';
import '../Transport.dart';
import '../UA.dart';
Expand Down Expand Up @@ -134,7 +135,8 @@ class InviteClientTransaction extends TransactionBase {
this.transport.send(cancel);
}

receiveResponse(SIPMessage.IncomingMessage response) {
void receiveResponse(int status_code, IncomingMessage response,
[void Function() onSuccess, void Function() onFailure]) {
var status_code = response.status_code;

if (status_code >= 100 && status_code <= 199) {
Expand Down
6 changes: 4 additions & 2 deletions lib/src/transactions/invite_server.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import '../../sip_ua.dart';
import '../SIPMessage.dart';
import '../Timers.dart';
import '../Transport.dart';
import '../UA.dart';
Expand All @@ -18,7 +19,7 @@ class InviteServerTransaction extends TransactionBase {
this.ua = ua;
this.transport = transport;
this.request = request;
this.last_response = '';
this.last_response = IncomingMessage();
request.server_transaction = this;

this.state = TransactionState.PROCEEDING;
Expand Down Expand Up @@ -87,7 +88,8 @@ class InviteServerTransaction extends TransactionBase {
}

// INVITE Server Transaction RFC 3261 17.2.1.
receiveResponse(status_code, response, onSuccess, onFailure) {
void receiveResponse(int status_code, IncomingMessage response,
[void Function() onSuccess, void Function() onFailure]) {
if (status_code >= 100 && status_code <= 199) {
switch (this.state) {
case TransactionState.PROCEEDING:
Expand Down
5 changes: 2 additions & 3 deletions lib/src/transactions/non_invite_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,8 @@ class NonInviteClientTransaction extends TransactionBase {
this.ua.destroyTransaction(this);
}

receiveResponse(IncomingResponse response) {
var status_code = response.status_code;

void receiveResponse(int status_code, IncomingMessage response,
[void Function() onSuccess, void Function() onFailure]) {
if (status_code < 200) {
switch (this.state) {
case TransactionState.TRYING:
Expand Down
7 changes: 5 additions & 2 deletions lib/src/transactions/non_invite_server.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'package:sip_ua/src/SIPMessage.dart';

import '../../sip_ua.dart';
import '../Timers.dart';
import '../Transport.dart';
Expand All @@ -17,7 +19,7 @@ class NonInviteServerTransaction extends TransactionBase {
this.ua = ua;
this.transport = transport;
this.request = request;
this.last_response = '';
this.last_response = IncomingMessage();
request.server_transaction = this;

this.state = TransactionState.TRYING;
Expand Down Expand Up @@ -48,7 +50,8 @@ class NonInviteServerTransaction extends TransactionBase {
}
}

receiveResponse(status_code, response, onSuccess, onFailure) {
receiveResponse(int status_code, IncomingMessage response,
[void Function() onSuccess, void Function() onFailure]) {
if (status_code == 100) {
/* RFC 4320 4.1
* 'A SIP element MUST NOT
Expand Down
Loading