diff --git a/lib/src/rtc_session.dart b/lib/src/rtc_session.dart index dd021c64..c08974f3 100644 --- a/lib/src/rtc_session.dart +++ b/lib/src/rtc_session.dart @@ -122,6 +122,7 @@ class RTCSession extends EventManager implements Owner { // Session info. String? _direction; + String? _w2cC2CId; NameAddrHeader? _local_identity; NameAddrHeader? _remote_identity; DateTime? _start_time; @@ -173,6 +174,8 @@ class RTCSession extends EventManager implements Owner { String? get direction => _direction; + String? get w2cC2CId => _w2cC2CId; + NameAddrHeader? get local_identity => _local_identity; NameAddrHeader? get remote_identity => _remote_identity; @@ -342,6 +345,7 @@ class RTCSession extends EventManager implements Owner { [Function(RTCSession)? initCallback]) { logger.d('init_incoming()'); + _w2cC2CId = request.getHeader('X-w2c-call-me'); int? expires; String? contentType = request.getHeader('Content-Type'); diff --git a/lib/src/sip_ua_helper.dart b/lib/src/sip_ua_helper.dart index cc554d09..a7e35070 100644 --- a/lib/src/sip_ua_helper.dart +++ b/lib/src/sip_ua_helper.dart @@ -569,6 +569,33 @@ class Call { return peerHasMediaLine; } + Map toJson() { + var isMuted = _session.isMuted(); + var isOnHold = _session.isOnHold(); + return { + 'id': id + , 'sessionId': _session.id + , 'sessionStatus': _session.status + , 'sessionContact': _session.contact + , 'sessionDirection': _session.direction + , 'sessionW2cC2CId': _session.w2cC2CId ?? '' + , 'sessionLocalIdentity': local_identity + , 'sessionRemoteIdentity': remote_identity + , 'sessionRemoteDisplayName': remote_display_name + , 'sessionRemoteHasAudio': remote_has_audio + , 'sessionRemoteHasVideo': remote_has_video + , 'sessionStartTime': _session.start_time.toString() + , 'sessionEndTime': _session.end_time.toString() + , 'sessionIsInProgress': _session.isInProgress() + , 'sessionIsEstablished': _session.isEstablished() + , 'sessionIsEnded': _session.isEnded() + , 'sessionIsAudioMuted': isMuted['audio'] + , 'sessionIsVideoMuted': isMuted['video'] + , 'sessionIsLocalOnHold': isOnHold['local'] + , 'sessionIsRemoteOnHold': isOnHold['remote'] + }; + } + Future>? getStats([MediaStreamTrack? track]) { return peerConnection?.getStats(track); }