Hi , so here I have reviewed my end on my Android client so far done what you said above, I was not using any turn server before , so I went to look for a commercial turn server option to quickly test this, I set the turn first on my client it still failed, I still getting the same error so I figured maybe let me set up the turn details on the Janus server (yes you don’t recommend this) as well. I used the Admin Console to review also here is
Here are the admin data before setting a turn server
{
"session_id": 2259718949886211,
"session_last_activity": 907108080274,
"session_timeout": 60,
"session_transport": "janus.transport.websockets",
"handle_id": 4920234458900978,
"loop-running": true,
"created": 907107074816,
"current_time": 907113120158,
"plugin": "janus.plugin.sip",
"plugin_specific": {
"username": "kinsley-kajiva",
"authuser": "kinsley-kajiva",
"secret": "(hidden)",
"display_name": "kinsley-kajiva",
"user_agent": "android",
"identity": "sip:kinsley-kajiva@publicIPAddress",
"registration_status": "registered",
"call_status": "incall",
"callee": "sip:2710210@publicIPAddress",
"srtp-required": "no",
"sdes-local-audio": "no",
"sdes-local-video": "no",
"sdes-remote-audio": "no",
"sdes-remote-video": "no",
"establishing": 1,
"established": 0,
"hangingup": 0,
"destroyed": 0
},
"flags": {
"got-offer": true,
"got-answer": true,
"negotiated": true,
"processing-offer": false,
"starting": true,
"ice-restart": false,
"ready": false,
"stopped": false,
"alert": false,
"trickle": true,
"all-trickles": true,
"resend-trickles": false,
"trickle-synced": false,
"data-channels": false,
"has-audio": false,
"has-video": false,
"new-datachan-sdp": false,
"rfc4588-rtx": false,
"cleaning": false,
"e2ee": false
},
"agent-created": 907107845808,
"agent-started": 907110584030,
"ice-mode": "full",
"ice-role": "controlled",
"sdps": {
"profile": "RTP/SAVPF",
"local": "v=0\r\no=- 424778616 2584930101 IN IP4 publicIPAddress\r\ns=Asterisk\r\nt=0 0\r\na=group:BUNDLE audio\r\na=ice-options:trickle\r\na=fingerprint:sha-256 02:D4:35:2E:83:4B:F6:3D:D9:1A:B3:BB:AE:FD:56:19:61:D8:7F:18:15:25:8F:3F:3E:D4:32:35:48:D9:D0:7F\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS *\r\nm=audio 9 RTP/SAVPF 8 0 126\r\nc=IN IP4 publicIPAddress\r\na=sendrecv\r\na=mid:audio\r\na=rtcp-mux\r\na=ice-ufrag:F1cB\r\na=ice-pwd:AxzvfNFosW/hnSZHvhc+sY\r\na=ice-options:trickle\r\na=setup:active\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:126 telephone-event/8000\r\na=fmtp:126 0-16\r\na=ptime:20\r\na=maxptime:150\r\na=msid:janus janusaudio\r\na=ssrc:3516858227 cname:janus\r\n",
"remote": "v=0\r\no=- 7114649829436467713 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio\r\na=msid-semantic: WMS 1198181\r\nm=audio 9 RTP/SAVPF 111 103 9 102 0 8 106 105 13 127 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:stB97kd88TUznlM4\r\na=ice-pwd:PBVSBnP/sFLUcueIWe49D6Xy\r\na=fingerprint:sha-1 3A:9D:67:47:77:10:8B:4B:D4:D2:27:05:40:9C:92:74:8D:CD:38:26\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=fmtp:111 minptime=10; useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:127 red/8000\r\na=rtpmap:126 telephone-event/8000\r\na=maxptime:60\r\na=ssrc:2477340097 cname:BFgrgsu2Gv50zl7F\r\na=ssrc:2477340097 msid:1198181 1928882\r\na=ssrc:2477340097 mslabel:1198181\r\na=ssrc:2477340097 label:1928882\r\n"
},
"queued-packets": 0,
"webrtc": {
"ice": {
"stream_id": 1,
"component_id": 1,
"state": "connecting",
"gathered": 907107846792,
"local-candidates": [
"1 1 udp 2013266431 publicIPAddress 23494 typ host",
"2 1 udp 2013266430 publicIPAddress 23178 typ host"
],
"remote-candidates": [
"1987901705 1 udp 2122260223 192.168.40.178 38536 typ host generation 0",
"1899191248 1 udp 2122194687 7.73.225.169 55633 typ host generation 0"
],
"ready": -1
},
"dtls": {
"fingerprint": "02:D4:35:2E:83:4B:F6:3D:D9:1A:B3:BB:AE:FD:56:19:61:D8:7F:18:15:25:8F:3F:3E:D4:32:35:48:D9:D0:7F",
"remote-fingerprint": "3A:9D:67:47:77:10:8B:4B:D4:D2:27:05:40:9C:92:74:8D:CD:38:26",
"remote-fingerprint-hash": "sha-1",
"dtls-role": "active",
"dtls-state": "created",
"retransmissions": 0,
"valid": false,
"srtp-profile": "none",
"ready": false,
"sctp-association": false,
"stats": {
"in": {
"packets": 0,
"bytes": 0
},
"out": {
"packets": 0,
"bytes": 0
}
}
},
"extensions": {
"urn:ietf:params:rtp-hdrext:ssrc-audio-level": 1
},
"bwe": {
"twcc": false,
"twcc-ext-id": 0
},
"media": {
"audio": {
"type": "audio",
"mindex": 0,
"mid": "audio",
"do_nacks": false,
"nack-queue-ms": 0,
"ssrc": {
"ssrc": 3516858227,
"ssrc-peer": 2477340097
},
"direction": {
"send": true,
"recv": true
},
"rtcp": {
"main": {
"base": 48000,
"rtt": 0,
"lost": 0,
"lost-by-remote": 0,
"jitter-local": 0,
"jitter-remote": 0,
"in-link-quality": 0,
"in-media-link-quality": 0,
"out-link-quality": 0,
"out-media-link-quality": 0
}
},
"stats": {
"in": {
"packets": 0,
"bytes": 0,
"bytes_lastsec": 0
},
"out": {
"packets": 0,
"bytes": 0,
"bytes_lastsec": 0,
"nacks": 0
}
}
}
}
}
}
here is after I set the turn for client and even server
{
"janus": "success",
"session_id": 4397561455765899,
"transaction": "MAL4CXJTgxXA",
"handle_id": 5206708597817136,
"info": {
"session_id": 4397561455765899,
"session_last_activity": 911955079739,
"session_timeout": 60,
"session_transport": "janus.transport.websockets",
"handle_id": 5206708597817136,
"loop-running": true,
"created": 911953270008,
"current_time": 911959100003,
"plugin": "janus.plugin.sip",
"plugin_specific": {
"username": "kinsley-kajiva",
"authuser": "kinsley-kajiva",
"secret": "(hidden)",
"display_name": "kinsley-kajiva",
"user_agent": "android",
"identity": "sip:kinsley-kajiva@publicIPAddress",
"registration_status": "registered",
"call_status": "incall",
"callee": "sip:2710210@publicIPAddress",
"srtp-required": "no",
"sdes-local-audio": "no",
"sdes-local-video": "no",
"sdes-remote-audio": "no",
"sdes-remote-video": "no",
"establishing": 1,
"established": 0,
"hangingup": 0,
"destroyed": 0
},
"flags": {
"got-offer": true,
"got-answer": true,
"negotiated": true,
"processing-offer": false,
"starting": true,
"ice-restart": false,
"ready": false,
"stopped": false,
"alert": false,
"trickle": true,
"all-trickles": true,
"resend-trickles": false,
"trickle-synced": false,
"data-channels": false,
"has-audio": false,
"has-video": false,
"new-datachan-sdp": false,
"rfc4588-rtx": false,
"cleaning": false,
"e2ee": false
},
"agent-created": 911953690810,
"agent-started": 911956895259,
"ice-mode": "full",
"ice-role": "controlled",
"sdps": {
"profile": "RTP/SAVPF",
"local": "v=0\r\no=- 227675344 2363707375 IN IP4 publicIPAddress\r\ns=Asterisk\r\nt=0 0\r\na=group:BUNDLE audio\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A8:EE:56:79:7D:F2:B9:D0:5F:7A:0A:22:D3:15:AC:F7:32:21:39:34:1F:91:0F:EF:E1:E4:C3:29:D4:5B:3D:FA\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS *\r\nm=audio 9 RTP/SAVPF 8 0 126\r\nc=IN IP4 publicIPAddress\r\na=sendrecv\r\na=mid:audio\r\na=rtcp-mux\r\na=ice-ufrag:IY4U\r\na=ice-pwd:rYO4T8eBHfMg4fOEoheld1\r\na=ice-options:trickle\r\na=setup:active\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:126 telephone-event/8000\r\na=fmtp:126 0-16\r\na=ptime:20\r\na=maxptime:150\r\na=msid:janus janusaudio\r\na=ssrc:2358218009 cname:janus\r\na=candidate:1 1 udp 2013266431 publicIPAddress 21429 typ host\r\na=candidate:2 1 udp 2013266430 publicIPAddress 31904 typ host\r\na=end-of-candidates\r\n",
"remote": "v=0\r\no=- 291438666124821913 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio\r\na=msid-semantic: WMS 1198181\r\nm=audio 9 RTP/SAVPF 111 103 9 102 0 8 106 105 13 127 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:VrJx1Gak0Xk4GFr6\r\na=ice-pwd:iUOBwAmByrCULA/FzSC+2ozL\r\na=fingerprint:sha-1 EB:A3:D9:F5:3B:34:65:CE:2D:F5:10:EA:32:F3:52:BF:33:95:84:D1\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=fmtp:111 minptime=10; useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:127 red/8000\r\na=rtpmap:126 telephone-event/8000\r\na=maxptime:60\r\na=ssrc:2096390204 cname:xEkHQ5qxQp/kOcJD\r\na=ssrc:2096390204 msid:1198181 1928882\r\na=ssrc:2096390204 mslabel:1198181\r\na=ssrc:2096390204 label:1928882\r\n"
},
"queued-packets": 0,
"webrtc": {
"ice": {
"stream_id": 1,
"component_id": 1,
"state": "connecting",
"gathered": 911954479953,
"local-candidates": [
"1 1 udp 2013266431 publicIPAddress 21429 typ host",
"2 1 udp 2013266430 publicIPAddress 31904 typ host"
],
"remote-candidates": [
"1987901705 1 udp 2122260223 192.168.40.178 46178 typ host generation 0",
"1899191248 1 udp 2122194687 7.73.225.169 51791 typ host generation 0",
"3136407194 1 udp 1686052607 41.150.226.92 10193 typ srflx raddr 192.168.40.178 rport 46178 generation 0",
"2267226628 1 udp 1685987071 41.150.226.69 22250 typ srflx raddr 7.73.225.169 rport 51791 generation 0",
"2627408041 1 udp 41820415 216.39.253.22 53318 typ relay raddr 41.150.226.77 rport 27313 generation 0",
"2627408041 1 udp 41885951 216.39.253.22 59945 typ relay raddr 41.150.226.114 rport 39212 generation 0",
"2627408041 1 udp 41819903 216.39.253.22 47072 typ relay raddr 41.150.226.100 rport 11093 generation 0",
"2627408041 1 udp 41885439 216.39.253.22 36387 typ relay raddr 41.150.226.69 rport 22265 generation 0",
"2627408041 1 udp 25042943 216.39.253.22 62249 typ relay raddr 41.150.226.92 rport 26650 generation 0",
"2627408041 1 udp 25043455 216.39.253.22 33253 typ relay raddr 41.150.226.87 rport 14629 generation 0",
"2627408041 1 udp 25108991 216.39.253.22 30119 typ relay raddr 41.150.226.92 rport 26630 generation 0",
"2627408041 1 udp 25108479 216.39.253.22 38187 typ relay raddr 41.150.226.77 rport 14782 generation 0"
],
"ready": -1
},
"dtls": {
"fingerprint": "A8:EE:56:79:7D:F2:B9:D0:5F:7A:0A:22:D3:15:AC:F7:32:21:39:34:1F:91:0F:EF:E1:E4:C3:29:D4:5B:3D:FA",
"remote-fingerprint": "EB:A3:D9:F5:3B:34:65:CE:2D:F5:10:EA:32:F3:52:BF:33:95:84:D1",
"remote-fingerprint-hash": "sha-1",
"dtls-role": "active",
"dtls-state": "created",
"retransmissions": 0,
"valid": false,
"srtp-profile": "none",
"ready": false,
"sctp-association": false,
"stats": {
"in": {
"packets": 0,
"bytes": 0
},
"out": {
"packets": 0,
"bytes": 0
}
}
},
"extensions": {
"urn:ietf:params:rtp-hdrext:ssrc-audio-level": 1
},
"bwe": {
"twcc": false,
"twcc-ext-id": 0
},
"media": {
"audio": {
"type": "audio",
"mindex": 0,
"mid": "audio",
"do_nacks": false,
"nack-queue-ms": 0,
"ssrc": {
"ssrc": 2358218009,
"ssrc-peer": 2096390204
},
"direction": {
"send": true,
"recv": true
},
"rtcp": {
"main": {
"base": 48000,
"rtt": 0,
"lost": 0,
"lost-by-remote": 0,
"jitter-local": 0,
"jitter-remote": 0,
"in-link-quality": 0,
"in-media-link-quality": 0,
"out-link-quality": 0,
"out-media-link-quality": 0
}
},
"stats": {
"in": {
"packets": 0,
"bytes": 0,
"bytes_lastsec": 0
},
"out": {
"packets": 0,
"bytes": 0,
"bytes_lastsec": 0,
"nacks": 0
}
}
}
}
}
}
}
another dump with both client and server set turn details
{
"janus": "success",
"session_id": 4397561455765899,
"transaction": "mmBDydzBiC6m",
"handle_id": 5206708597817136,
"info": {
"session_id": 4397561455765899,
"session_last_activity": 911978264876,
"session_timeout": 60,
"session_transport": "janus.transport.websockets",
"handle_id": 5206708597817136,
"loop-running": true,
"created": 911953270008,
"current_time": 911996810547,
"plugin": "janus.plugin.sip",
"plugin_specific": {
"username": "kinsley-kajiva",
"authuser": "kinsley-kajiva",
"secret": "(hidden)",
"display_name": "kinsley-kajiva",
"user_agent": "android",
"identity": "sip:kinsley-kajiva@publicIPAddress",
"registration_status": "registered",
"call_status": "incall",
"callee": "sip:2710210@publicIPAddress",
"srtp-required": "no",
"sdes-local-audio": "no",
"sdes-local-video": "no",
"sdes-remote-audio": "no",
"sdes-remote-video": "no",
"establishing": 1,
"established": 0,
"hangingup": 0,
"destroyed": 0
},
"flags": {
"got-offer": true,
"got-answer": true,
"negotiated": true,
"processing-offer": false,
"starting": true,
"ice-restart": false,
"ready": false,
"stopped": false,
"alert": false,
"trickle": true,
"all-trickles": true,
"resend-trickles": false,
"trickle-synced": false,
"data-channels": false,
"has-audio": false,
"has-video": false,
"new-datachan-sdp": false,
"rfc4588-rtx": false,
"cleaning": false,
"e2ee": false
},
"agent-created": 911953690810,
"agent-started": 911956895259,
"ice-mode": "full",
"ice-role": "controlled",
"sdps": {
"profile": "RTP/SAVPF",
"local": "v=0\r\no=- 227675344 2363707375 IN IP4 publicIPAddress\r\ns=Asterisk\r\nt=0 0\r\na=group:BUNDLE audio\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A8:EE:56:79:7D:F2:B9:D0:5F:7A:0A:22:D3:15:AC:F7:32:21:39:34:1F:91:0F:EF:E1:E4:C3:29:D4:5B:3D:FA\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS *\r\nm=audio 9 RTP/SAVPF 8 0 126\r\nc=IN IP4 publicIPAddress\r\na=sendrecv\r\na=mid:audio\r\na=rtcp-mux\r\na=ice-ufrag:IY4U\r\na=ice-pwd:rYO4T8eBHfMg4fOEoheld1\r\na=ice-options:trickle\r\na=setup:active\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:126 telephone-event/8000\r\na=fmtp:126 0-16\r\na=ptime:20\r\na=maxptime:150\r\na=msid:janus janusaudio\r\na=ssrc:2358218009 cname:janus\r\na=candidate:1 1 udp 2013266431 publicIPAddress 21429 typ host\r\na=candidate:2 1 udp 2013266430 publicIPAddress 31904 typ host\r\na=end-of-candidates\r\n",
"remote": "v=0\r\no=- 291438666124821913 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio\r\na=msid-semantic: WMS 1198181\r\nm=audio 9 RTP/SAVPF 111 103 9 102 0 8 106 105 13 127 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:VrJx1Gak0Xk4GFr6\r\na=ice-pwd:iUOBwAmByrCULA/FzSC+2ozL\r\na=fingerprint:sha-1 EB:A3:D9:F5:3B:34:65:CE:2D:F5:10:EA:32:F3:52:BF:33:95:84:D1\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=fmtp:111 minptime=10; useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:127 red/8000\r\na=rtpmap:126 telephone-event/8000\r\na=maxptime:60\r\na=ssrc:2096390204 cname:xEkHQ5qxQp/kOcJD\r\na=ssrc:2096390204 msid:1198181 1928882\r\na=ssrc:2096390204 mslabel:1198181\r\na=ssrc:2096390204 label:1928882\r\n"
},
"queued-packets": 0,
"webrtc": {
"ice": {
"stream_id": 1,
"component_id": 1,
"state": "failed",
"failed-detected": 911995351920,
"icetimer-started": true,
"gathered": 911954479953,
"local-candidates": [
"1 1 udp 2013266431 publicIPAddress 21429 typ host",
"2 1 udp 2013266430 publicIPAddress 31904 typ host"
],
"remote-candidates": [
"1987901705 1 udp 2122260223 192.168.40.178 46178 typ host generation 0",
"1899191248 1 udp 2122194687 7.73.225.169 51791 typ host generation 0",
"3136407194 1 udp 1686052607 41.150.226.92 10193 typ srflx raddr 192.168.40.178 rport 46178 generation 0",
"2267226628 1 udp 1685987071 41.150.226.69 22250 typ srflx raddr 7.73.225.169 rport 51791 generation 0",
"2627408041 1 udp 41820415 216.39.253.22 53318 typ relay raddr 41.150.226.77 rport 27313 generation 0",
"2627408041 1 udp 41885951 216.39.253.22 59945 typ relay raddr 41.150.226.114 rport 39212 generation 0",
"2627408041 1 udp 41819903 216.39.253.22 47072 typ relay raddr 41.150.226.100 rport 11093 generation 0",
"2627408041 1 udp 41885439 216.39.253.22 36387 typ relay raddr 41.150.226.69 rport 22265 generation 0",
"2627408041 1 udp 25042943 216.39.253.22 62249 typ relay raddr 41.150.226.92 rport 26650 generation 0",
"2627408041 1 udp 25043455 216.39.253.22 33253 typ relay raddr 41.150.226.87 rport 14629 generation 0",
"2627408041 1 udp 25108991 216.39.253.22 30119 typ relay raddr 41.150.226.92 rport 26630 generation 0",
"2627408041 1 udp 25108479 216.39.253.22 38187 typ relay raddr 41.150.226.77 rport 14782 generation 0"
],
"ready": -1
},
"dtls": {
"fingerprint": "A8:EE:56:79:7D:F2:B9:D0:5F:7A:0A:22:D3:15:AC:F7:32:21:39:34:1F:91:0F:EF:E1:E4:C3:29:D4:5B:3D:FA",
"remote-fingerprint": "EB:A3:D9:F5:3B:34:65:CE:2D:F5:10:EA:32:F3:52:BF:33:95:84:D1",
"remote-fingerprint-hash": "sha-1",
"dtls-role": "active",
"dtls-state": "created",
"retransmissions": 0,
"valid": false,
"srtp-profile": "none",
"ready": false,
"sctp-association": false,
"stats": {
"in": {
"packets": 0,
"bytes": 0
},
"out": {
"packets": 0,
"bytes": 0
}
}
},
"extensions": {
"urn:ietf:params:rtp-hdrext:ssrc-audio-level": 1
},
"bwe": {
"twcc": false,
"twcc-ext-id": 0
},
"media": {
"audio": {
"type": "audio",
"mindex": 0,
"mid": "audio",
"do_nacks": false,
"nack-queue-ms": 0,
"ssrc": {
"ssrc": 2358218009,
"ssrc-peer": 2096390204
},
"direction": {
"send": true,
"recv": true
},
"rtcp": {
"main": {
"base": 48000,
"rtt": 0,
"lost": 0,
"lost-by-remote": 0,
"jitter-local": 0,
"jitter-remote": 0,
"in-link-quality": 0,
"in-media-link-quality": 0,
"out-link-quality": 0,
"out-media-link-quality": 0
}
},
"stats": {
"in": {
"packets": 0,
"bytes": 0,
"bytes_lastsec": 0
},
"out": {
"packets": 0,
"bytes": 0,
"bytes_lastsec": 0,
"nacks": 0
}
}
}
}
}
}
}
What am I missing because I have open the server to the best way I can or its still on my client side