Skip to content

Commit cb23a4c

Browse files
committed
RFC8599 support. Refs #89
1 parent 16c40d0 commit cb23a4c

File tree

3 files changed

+40
-6
lines changed

3 files changed

+40
-6
lines changed

lib/src/config.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class Settings {
3939
// Registration parameters.
4040
var register = true;
4141
var register_expires = 600;
42+
var register_extra_headers = null;
43+
var register_extra_contact_params = null;
4244
var registrar_server = null;
4345

4446
// Connection options.
@@ -211,6 +213,20 @@ class Checks {
211213
dst.register_expires = register_expires;
212214
}
213215
},
216+
'register_extra_headers': (src, dst) {
217+
var register_extra_headers = src.register_extra_headers;
218+
if (register_extra_headers == null) return;
219+
if (register_extra_headers is List<String>) {
220+
dst.register_extra_headers = register_extra_headers;
221+
}
222+
},
223+
'register_extra_contact_params': (src, dst) {
224+
var register_extra_contact_params = src.register_extra_contact_params;
225+
if (register_extra_contact_params == null) return;
226+
if (register_extra_contact_params is Map<String, dynamic>) {
227+
dst.register_extra_contact_params = register_extra_contact_params;
228+
}
229+
},
214230
'registrar_server': (src, dst) {
215231
var registrar_server = src.registrar_server;
216232
if (registrar_server == null) return;

lib/src/registrator.dart

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,10 @@ class Registrator {
6666
this._contact += ';+sip.ice';
6767

6868
// Custom headers for REGISTER and un-REGISTER.
69-
this._extraHeaders = [];
69+
this.setExtraHeaders(ua.configuration.register_extra_headers);
7070

7171
// Custom Contact header params for REGISTER and un-REGISTER.
72-
this._extraContactParams = '';
72+
this.setExtraContactParams(ua.configuration.register_extra_contact_params);
7373

7474
if (reg_id != null) {
7575
this._contact += ';reg-id=${reg_id}';
@@ -111,7 +111,7 @@ class Registrator {
111111
return;
112112
}
113113

114-
var extraHeaders = _extraHeaders ?? [];
114+
var extraHeaders = this._extraHeaders ?? [];
115115

116116
extraHeaders.add(
117117
'Contact: ${this._contact};expires=${this._expires}${this._extraContactParams}');
@@ -133,11 +133,15 @@ class Registrator {
133133
EventManager localEventHandlers = EventManager();
134134
localEventHandlers.on(EventOnRequestTimeout(),
135135
(EventOnRequestTimeout value) {
136-
this._registrationFailure(UnHandledResponse(408, DartSIP_C.causes.REQUEST_TIMEOUT), DartSIP_C.causes.REQUEST_TIMEOUT);
136+
this._registrationFailure(
137+
UnHandledResponse(408, DartSIP_C.causes.REQUEST_TIMEOUT),
138+
DartSIP_C.causes.REQUEST_TIMEOUT);
137139
});
138140
localEventHandlers.on(EventOnTransportError(),
139141
(EventOnTransportError value) {
140-
this._registrationFailure(UnHandledResponse(500, DartSIP_C.causes.CONNECTION_ERROR), DartSIP_C.causes.CONNECTION_ERROR);
142+
this._registrationFailure(
143+
UnHandledResponse(500, DartSIP_C.causes.CONNECTION_ERROR),
144+
DartSIP_C.causes.CONNECTION_ERROR);
141145
});
142146
localEventHandlers.on(EventOnAuthenticated(), (EventOnAuthenticated value) {
143147
this._cseq += 1;
@@ -274,7 +278,7 @@ class Registrator {
274278
this._registrationTimer = null;
275279
}
276280

277-
var extraHeaders = _extraHeaders ?? [];
281+
var extraHeaders = this._extraHeaders ?? [];
278282

279283
if (unregister_all) {
280284
extraHeaders.add('Contact: *${this._extraContactParams}');

lib/src/sip_ua_helper.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ class SIPUAHelper extends EventManager {
103103
_settings.display_name = uaSettings.displayName;
104104
_settings.authorization_user = uaSettings.authorizationUser;
105105
_settings.user_agent = uaSettings.userAgent ?? DartSIP_C.USER_AGENT;
106+
_settings.register_extra_headers = uaSettings.registerParams.extraHeaders;
107+
_settings.register_extra_contact_params =
108+
uaSettings.registerParams.extraContactParams;
106109

107110
try {
108111
_ua = UA(_settings);
@@ -528,10 +531,21 @@ class WebSocketSettings {
528531
bool allowBadCertificate = false;
529532
}
530533

534+
class RegisterParams {
535+
/// Allow extra headers and Contact Params to be sent on REGISTER
536+
/// Mainly used for RFC8599 Support
537+
/// https://github.com/cloudwebrtc/dart-sip-ua/issues/89
538+
Map<String, dynamic> extraHeaders = {};
539+
Map<String, dynamic> extraContactParams = {};
540+
}
541+
531542
class UaSettings {
532543
String webSocketUrl;
533544
WebSocketSettings webSocketSettings = WebSocketSettings();
534545

546+
/// Mainly used for RFC8599 Push Notification Support
547+
RegisterParams registerParams = RegisterParams();
548+
535549
/// `User Agent` field for sip message.
536550
String userAgent;
537551
String uri;

0 commit comments

Comments
 (0)